我正在doInBackground
上的AsyncTask
内的Android
方法中执行数据库操作。
由于某种原因,UI
在操作所需的5-6秒内被阻止。
对我来说没有任何意义,doInBackground
中的操作不应该在UI Thread
中执行,对吗?
这是我的代码:
private class CountItems extends AsyncTask<String, Void, Integer> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(context);
dialog.setCancelable(false);
dialog.setMessage(getString(R.string.asynTask_loading));
dialog.show();
}
@Override
protected Integer doInBackground(String... params) {
// This operation takes 5-6 seconds.
return app.databaseSession().getMyObjectDao().count(selectedProject, filter, null, false);
}
@Override
protected void onPostExecute(Integer result) {
counterTextView.setText(String.valueOf(result));
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
我做了一个测试。如果我在Thread.sleep()
方法中添加doInBackground
,则会在不同的Thread
内执行,而不会阻止UI
。
像这样:
@Override
protected Integer doInBackground(String... params) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 0;
}
有什么想法吗? 提前谢谢。