2016-08-11 43 views
-1

尝试首次实现AsyncTask。当我第一次启动应用程序时,它会起作用,并且会显示加载消息对话框(尽管微调不是!),但是在我启动该活动的许多其他时间,应用程序冻结了几秒钟(在后台加载),没有明显的ProgressDialog或者这意味着AsyncTask无法正常工作。这里是我的代码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(); 
     } 
    } 


} 
+1

从哪里开始里面的onCreate()你aync任务 – MRX

+0

....这里是代码“新PrepareFragments()。执行( );“ – Bialy

+0

你在'doInBackgournd'方法中关闭了你的数据库吗? –

回答

0

如果您doInBackground执行速度非常快,可能可能对话框不会显示或只是眨眼。 +来电秀最后

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

问题根本不在于对话框。在显示目标活动之前,父活动需要很长时间。 – Bialy

+0

请检查你是否在做很多事onCreate – Ramit

0

尝试使用执行人

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

不工作仍然 – Bialy

相关问题