Không chắc bạn đang sử dụng SQLiteOpenHelper
đúng cách ... bạn không cần myDataBase
đó , ý tưởng là nó quản lý kết nối cơ sở dữ liệu của bạn cho bạn. Đừng phân lớp theo cách đó ... trừ khi bạn đang làm những việc trong onCreate()
vv không được đăng ở đây, có vẻ như bạn chỉ có thể sử dụng SQLiteOpenHelper
trực tiếp, tức là:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
DB_VERSION_NUMBER);
Giả sử rằng việc kết thúc hoạt động cũng sẽ dừng tác vụ nền của bạn, tôi khuyên bạn nên gọi AsyncTask.cancel(true)
từ Activity.onPause()
của bạn . Đảm bảo cơ sở dữ liệu được dọn sạch khỏi onCancell ().
Và nếu tác vụ nền của bạn là thứ duy nhất đọc cơ sở dữ liệu thì hãy làm cho nó sở hữu phiên bản SQLiteOpenHelper. Rất dễ gặp rắc rối với dữ liệu tĩnh, vì vậy tốt nhất bạn nên tránh IMHO. Tôi muốn làm một cái gì đó như thế này:
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
}
}