第一次尝试实现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();
}
}
}
答案 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);