でバックグラウンドでいくつかのタスクを実行しようとしています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
まだ表示されるのかということです。実際、私はこのようにテストしました。2秒後すぐにハードバックキーを押しました。データベースを確認したところ、すべてのレコードが挿入されていることがわかりました。onPostExecute()
が作業を終了するとすぐに呼び出されないのはなぜdoInBackground()
ですか??
そして最後の質問は、まだ表示されている間にハードバックキーが押されたときに、AlertDialog
yes と noを表示したいということです。次に、はいを押すと、が消え、作業が停止します。いいえが押された場合、 のみが閉じられ、は引き続き表示されます。Button
ProgressDialog
ProgressDialog
doInBackground()
AlertDialog
ProgressDialog
私の疑問を解決するのを手伝ってください。