我需要编写显示 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。