AsyncTask有时可以工作,有时不工作

时间:2016-08-11 16:05:47

标签: android android-studio android-asynctask

第一次尝试实现AsyncTask。当我第一次启动应用程序时,它会起作用,并且会出现加载消息对话框(尽管微调器没有!),但是在我启动活动的许多其他时间,应用程序冻结了几秒钟(在后台加载)没有明显的ProgressDialog或被调用的活动,这意味着AsyncTask不起作用。这是我的代码

private class PrepareFragments extends AsyncTask<Void, Void, ArrayList<Cursor>> {

    ProgressDialog pd;
    ArrayList<Cursor> cursors;

    @Override
    protected void onPreExecute() {
        Log.d("onPre : ", "true");

        pd = new ProgressDialog(CategoryDrugs.this);
        pd.show();
        pd.setMessage("Loading...");
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setProgress(0);
        pd.setMax(100);

    }

    @Override
    protected ArrayList<Cursor> doInBackground(Void ... arg) {
        Log.d("doInBG : ", "true");

        // my custom code here

    }


    @Override
    protected void onProgressUpdate(Void... values) {
        pd.incrementProgressBy(1);
    }

    @Override
    protected void onPostExecute(ArrayList<Cursor> cursor) {
        Log.d("onPost : ", "true");

        if (pd.isShowing()) {
            pd.dismiss();
        }
    }


}

2 个答案:

答案 0 :(得分:0)

如果你的doInBackground执行得非常快,那么对话框可能不会显示或只是闪烁。 +最后致电显示

pd = new ProgressDialog(CategoryDrugs.this);
pd.setMessage("Loading...");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setProgress(0);
pd.setMax(100);
pd.show();

答案 1 :(得分:0)

尝试使用执行器

new PrepareFragments().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);