アプリの初期化中にメッセージとプログレス バーを表示したいと考えています。
アプリを初めて実行するときに、いくつかの単語の辞書を SQLite データベースに挿入する必要があります。これを行うには、SQLiteOpenHelper を開いて再度閉じる AsyncTask を使用します。これにより、データベースの初期化が 1 回行われます。
private class AsyncDbInit extends AsyncTask<Void, Void, Void> {
private Context context;
private Intent intent;
public AsyncDbInit(Context context, Intent intent){
this.context = context;
this.intent = intent;
}
@Override
protected Void doInBackground(Void... params) {
DatabaseHandler db = new DatabaseHandler(this.context);
db.close();
return null;
}
@Override
protected void onPostExecute(Void param) {
context.startActivity(this.intent);
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... params) {}
}
この AsyncTask は私の onCreate() メソッドで呼び出されますが、onStart() と onResume() からも成功せずに実行しようとしました。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dispatcher);
... //some code finding the right intent
new AsyncDbInit(this, nextIntent).execute();
}
どういうわけか、AsyncTask を呼び出すこの最後の行によって、UI が表示されなくなります。AsyncTask が完了して新しいアクティビティが開始されるまで、画面は空白のままです。その行をコメントアウトすると、UI が正常に表示されます。
私が思いつくことができる唯一のことは、SQLiteOpenHelper が何らかの形で UiThread をブロックすることですが、それについても何も見つかりませんでした。