SQLiteOpenHelper
を使用しているかどうかわからない 適切に...そのmyDataBase
は必要ありません フィールドでは、データベース接続を管理するという考え方です。そのようにサブクラス化しないでください...onCreate()
で何かをしている場合を除きます ここに投稿されていないものなどは、SQLiteOpenHelper
を使用できるようです。 直接、つまり:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
アクティビティを終了するとバックグラウンドタスクも停止するはずだとすると、AsyncTask.cancel(true)
を呼び出すことをお勧めします。 Activity.onPause()
から 。データベースがonCancelled()からクリーンアップされていることを確認します。
また、バックグラウンドタスクがデータベースを読み取る唯一のものである場合は、データベースにSQLiteOpenHelperインスタンスを所有させます。静的データで問題が発生するのは簡単なので、私見は避けるのが最善です。私はこのようなことをします:
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
}
}