Nie jestem pewien, czy używasz SQLiteOpenHelper
właściwie... nie potrzebujesz tej myDataBase
dziedzinie, chodzi o to, aby zarządzał połączeniem z bazą danych za Ciebie. Nie podklasuj w ten sposób... chyba że robisz coś w onCreate()
itp., które nie są tutaj zamieszczone, wygląda na to, że możesz po prostu użyć SQLiteOpenHelper
bezpośrednio, tj.:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Zakładając, że zakończenie aktywności powinno również zatrzymać zadanie w tle, polecam wywołanie AsyncTask.cancel(true)
z Twojej Activity.onPause()
. Upewnij się, że baza danych została oczyszczona z onCancelled().
A jeśli twoje zadanie w tle jest jedyną rzeczą, która odczytuje bazę danych, uczyń ją właścicielem instancji SQLiteOpenHelper. Łatwo wpaść w kłopoty z danymi statycznymi, więc najlepiej unikać IMHO. Zrobiłbym coś takiego:
protected class BackTask extends AsyncTask<String, Integer, String>
{
private SQLiteOpenHelper sqlite;
public void BackTask(Context ctx) {
sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
}
@Override
protected String doInBackground(String... params)
{
try {
//get requeste data from the database
//access the web service
return result;
} catch (Exception e) {
}
return null;
}
@Override
protected void onCancelled() {
sqlite.close();
}
@Override
protected void onPostExecute(String result)
sqlite.close();
// Update UI here
}
}