Я хочу показать некоторое сообщение и индикатор выполнения, пока мое приложение инициализируется.Android setContentView, подавленный AsyncTask в onCreate
Мне нужно вставить некоторые словари слов в базу данных SQLite при первом запуске моего приложения. Для этого у меня есть AsyncTask, который открывает мой SQLiteOpenHelper и снова закрывает его, так что инициализация базы данных выполняется один раз.
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() без Succes.
@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, останавливает мой интерфейс. экран просто остается пустым, пока не будет завершена работа AsyncTask, и начнется новое действие. Когда я прокомментирую эту строку, пользовательский интерфейс отображается просто отлично.
Единственное, что я могу придумать, это то, что SQLiteOpenHelper каким-то образом блокирует UiThread, но я ничего не мог найти об этом.
Я попытался выполнить executeOnExecutor() с исполнителем пула потоков, но это не сработало. Тем не менее, тот же UI замерзает. Теперь я запускаю AsyncTask с помощью кнопки. Вид теперь загружается, но через несколько секунд после нажатия кнопки мой экран становится черным, пока не будет выполнена AsyncTask. – Dasyel