我正在尝试在后台执行一些任务AsynTask
。如下:
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
还会出现。实际上,我是这样测试的。两秒钟后,我立即按下了硬返回键。并检查了数据库,我发现所有的记录都被插入了。为什么onPostExecute()
不在doInBackground()
完成工作后立即调用?
最后一个问题是,我想在仍然可见的情况下按下硬返回键时显示AlertDialog
yes 和 no 。然后,如果按下是,则应该消失并且应该停止工作。如果没有按下,那么只有应该被解除,并且应该仍然可见。Button
ProgressDialog
ProgressDialog
doInBackground()
AlertDialog
ProgressDialog
请帮我解决我的疑惑。