我需要编写显示 ProgressDialog 的静态方法,在线程中运行 worker 并且在 worker 完成后 ProgreesDialog 必须关闭并且我的方法返回 worker 所做的。这是我的代码:
public static TOut execute(final Context c, final String title, final String message, final IProgressWorker worker, final TIn param)
{
最终 ValueHolder 结果 = 新 ValueHolder();
最终 ProgressDialog 进度=新 ProgressDialog(c,R.layout.progress_impl_layout);
线程主 = 新线程(新可运行(){
@覆盖
公共无效运行(){
Looper.prepare();//创建新的Looper以立即显示progressDialog
最终 Looper looper=Looper.myLooper();
AsyncTask async = new AsyncTask(){
@覆盖
受保护的无效onPostExecute(布尔结果){
super.onPostExecute(结果);
完成=真;
looper.quit();//退出 Looper.loop
progress.dismiss();
}
@覆盖
受保护的无效onPreExecute(){
super.onPreExecute();
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setTitle(title);
进度.setMessage(消息);
进度.show();
}
@覆盖
受保护的布尔doInBackground(整数...参数){
IProgressImpl progressImpl=new MyProgressImpl(progress);
worker.execute(progressImpl, param);
返回真;
}
};
async.execute(0);
如果(!完成){
Looper.loop();//立即显示progressDialog
}
}
});
main.start();
尝试 {
main.join();
} 捕捉(InterruptedException e){
// TODO 自动生成的 catch 块
e.printStackTrace();
}
返回结果。值;
}
一切正常,但 ProgressDialog 不会解雇。我怀疑 looper.quit() 做错了什么,但我需要停止 Looper.loop()。我调用 loop() 因为我需要立即显示 ProgressDialog。