Не съм сигурен, че използвате SQLiteOpenHelper
правилно... не ви трябва тази myDataBase
поле, идеята е, че той управлява връзката с вашата база данни вместо вас. Не подкласирайте по този начин... освен ако не правите неща в onCreate()
и т.н., които не са публикувани тук, изглежда, че можете просто да използвате SQLiteOpenHelper
директно, т.е.:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Ако приемем, че прекратяването на дейността трябва да спре и вашата фонова задача, бих препоръчал да извикате AsyncTask.cancel(true)
от вашия Activity.onPause()
. Уверете се, че базата данни е почистена от onCancelled().
И ако вашата фонова задача е единственото нещо, което чете базата данни, направете я собственик на екземпляра на SQLiteOpenHelper. Лесно е да си навлечете проблеми със статични данни, така че е най-добре да се избягва IMHO. Бих направил нещо подобно:
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
}
}