我必须将几张图片加载到主线程中,并且我想在此过程中显示一个加载对话框,但不知何故我无法显示进度对话框...
我的代码如下:
private ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.background);
progress = ProgressDialog.show(this, "",getString(R.string.background_loading), true);
LoadBackgrounds loadB = new LoadBackgrounds();
new Thread(loadB).start();
}
public class LoadBackgrounds implements Runnable {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
loadPictures();
progress.dismiss();
}
});
}
}
loadPictures()
必须在 runOnUiThread
中调用,因为它会修改 View 。
那么,为什么在加载图片时不显示进度对话框?
最佳答案
我不是 100% 确定,但这是我的猜测:
- 您创建了一个线程,该线程应与 UIThread 分开运行,但在其中调用
runOnUiThread()
将此线程与 UIThread 合并。 - 您创建了一个可在线程中运行的可运行对象,该线程创建了可在另一个线程上运行的可运行对象。我想你应该明白那是胡说八道
- 您的
loadPictures()
可能会减慢 UIThread 的速度,这可能是您一开始看不到进度对话框的原因,并且在加载完成后立即关闭它。 - 我还猜测您得到了一个 ANR 对话框(应用程序未响应)或者您看到很多
Skipped X 帧!应用程序可能在其主线程上做了太多工作。
logcat 输出中的消息。
我的建议以及根据您的 loadPictures()
方法实际执行的操作:使用 AsyncTask 或者,当您访问服务器以获取图片时,检查像 Volley
这样的库或 RetroFit
并使用它们来获取数据。
关于android - 加载图片时不显示进度对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609974/