Asynctask中的Android数据库操作阻止UI线程

时间:2017-01-20 14:29:12

标签: database android-asynctask blocking ui-thread

我正在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;
    }

有什么想法吗? 提前谢谢。

0 个答案:

没有答案