Ogu*_*han 17 android progressdialog android-asynctask
可能重复:
AsyncTask阻止UI威胁并显示延迟的进度条
我想在从任何服务器检索JSON时显示progressDialog.所以我使用AsyncTask作为解决方案(不确定任何不同的出路).
一切都很好,ProgressDialog正常工作,直到我使用AsyncTask实例调用.get()方法.我想它会以某种方式阻止UI.这是我的AsyncTask:
public class myAsync extends AsyncTask<String, String, List> {
String message; // for dialog message
ProgressDialog progress;
Intent myIntent;
Context ctx;
public myAsync(String message, Context ctx) {
this.message = message;
this.ctx = ctx;
progress = new ProgressDialog(ctx);
}
@Override
protected void onPreExecute() {
progress.setMessage(message);
progress.setIndeterminate(true);
progress.setCancelable(false);
progress.show();
}
@Override
protected List doInBackground(String... params) {
//returns any list after the task
return anyList;
}
@Override
protected void onPostExecute(List result) {
if(progress.isShowing())
progress.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
这里是调用AsyncTask的myActivity:
myAsync asyncTask = new myAsync("Loading...", this);
asyncTask.execute("Any string", "Other string");
asyncTask.get(); // If I comment out this line, ProgressDialog works
Run Code Online (Sandbox Code Playgroud)
执行后,当我尝试从doInBackground和onPostExecute记录结果时,都没有问题.但是,如果我想使用.get(),结果ProgressDialog没有显示或显示的时间很短(可能是0.2秒)
有什么问题?
rds*_*rds 26
是,如果需要get()
等待计算完成,然后检索其结果.这意味着,您正在阻止UI线程,等待结果.
解决方案:不要打电话 get
通常,您将调用函数(回调)postExecute
.