Ich bin mir nicht sicher, ob Sie SQLiteOpenHelper
verwenden richtig ... Sie brauchen diese myDataBase
nicht Feld, die Idee ist, dass es Ihre Datenbankverbindung für Sie verwaltet. Machen Sie keine Unterklassen auf diese Weise ... es sei denn, Sie machen Dinge in onCreate()
usw., die hier nicht gepostet werden, sieht es so aus, als könnten Sie einfach SQLiteOpenHelper
verwenden direkt, also:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Unter der Annahme, dass das Beenden der Aktivität auch Ihre Hintergrundaufgabe beenden sollte, würde ich empfehlen, AsyncTask.cancel(true)
aufzurufen aus Ihrer Activity.onPause()
. Stellen Sie sicher, dass die Datenbank von onCancelled() bereinigt wird.
Und wenn Ihre Hintergrundaufgabe das einzige ist, was die Datenbank liest, machen Sie sie zum Eigentümer der SQLiteOpenHelper-Instanz. Es ist leicht, mit statischen Daten in Schwierigkeiten zu geraten, daher ist es meiner Meinung nach am besten, sie zu vermeiden. Ich würde so etwas tun:
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
}
}