【发布时间】:2015-05-01 05:38:17
【问题描述】:
发现ProgressDialog 的奇怪行为。
在启动新线程之前,我在列表的onClickListener 中显示ProgressDialog,在该线程内显示dismiss,但在所有工作完成后:
GlobalProgressDialog.show(getActivity());
new Thread(new Runnable() {
@Override
public void run() {
//...all other logic
GlobalProgressDialog.dismiss();
}
}).start();
还有我用来简化通话的GlobalProgressDialog:
public class GlobalProgressDialog{
private static ProgressDialog progressDialog;
public static void show(Activity activity){
progressDialog = new ProgressDialog(activity);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
public static void dismiss(){
if (progressDialog != null) {
progressDialog.dismiss();
}
}
}
对话框出现但不是在show() 被调用之后!我调试了一下,发现有4个标准的Android类在运行:
- AdapterView.java
- AbsListView.java
- Handler.java
- Looper.java
只有在Looper 之后,ProgressDialog 才会下雪。是否有可能欺骗或修复?或者也许我的代码有问题?会是什么?
问题是项目点击和show() 之间的延迟大约为 1 秒。所以应用程序冻结 1 秒。然后才会出现对话框,完成所有工作需要 1-2 秒,有时甚至需要 0.5 秒。在这种情况下,查看冻结的应用程序并闪烁 0.5 秒的进度对话框并不酷。
提前致谢。
【问题讨论】:
-
简单的解决方案是使用
AsyncTask而不是Thread -
我已经尝试过 AsyncTask。它的工作原理相同。
preExecute()和点击之间还有一段距离
标签: android multithreading progressdialog android-progressbar