我想在我的应用程序初始化时显示一些消息和进度条。
第一次运行我的应用程序时,我需要将一些单词词典插入 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() 运行它,但没有成功。
@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,但我也找不到任何相关信息。