我想在後臺執行一些任務AsynTask
。如下圖所示:取消與後退按鈕的asynctask
class CheckTypesTask extends AsyncTask<Void, Void, Void> {
ProgressDialog Asycdialog = new ProgressDialog(Home.this);
String typeStatus;
@Override
protected void onPreExecute() {
super.onPreExecute();
Asycdialog.setMessage("First time initialization. Please wait...");
Asycdialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
create_database_and_tables();
insert_in_questions();
insert_in_answer_option();
return null;
}
@Override
protected void onPostExecute(Void result) {
// hide the dialog
super.onPostExecute(result);
database.close();
Asycdialog.dismiss();
}
現在的問題是,如果我按硬盤返回鍵,而ProgressDialog
是可見的,它只是簡單地關閉ProgressDialog
。但是,當我檢查Database
時,我發現所有要插入的記錄都已成功插入。我不明白爲什麼ProgressDialog
繼續顯示,即使doInBackground()
完成其工作,無論ProgressDialog
在某個時間後消失,但爲什麼這樣?
我的下一個問題是,如果要插入的數據集不夠大,那麼爲什麼仍然出現ProgressDialog
。其實,我是這樣測試的。兩秒鐘後立即按下硬鎖鍵。並檢查數據庫,我發現所有的記錄都被插入。爲什麼只要doInBackground()
完成其工作就不會被呼叫?
最後一個問題是,我想顯示一個AlertDialog
與是和不Button
,當硬按鍵被按下,而ProgressDialog
仍然可見。然後,如果按下,則應該消失ProgressDialog
,並且應該停止doInBackground()
工作。如果沒有被按下,那麼只有AlertDialog
應該被解僱,並且ProgressDialog
應該仍然可見。
請幫我解決我的疑惑。
看看我的這個答案是否有幫助:http://stackoverflow.com/a/15947770/450534 – 2013-04-24 08:21:33