android - 加载图片时不显示进度对话框

标签 android multithreading progressdialog

我必须将几张图片加载到主线程中,并且我想在此过程中显示一个加载对话框,但不知何故我无法显示进度对话框...

我的代码如下:

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% 确定,但这是我的猜测:

  1. 您创建了一个线程,该线程应与 UIThread 分开运行,但在其中调用 runOnUiThread() 将此线程与 UIThread 合并。
  2. 您创建了一个可在线程中运行的可运行对象,该线程创建了可在另一个线程上运行的可运行对象。我想你应该明白那是胡说八道
  3. 您的 loadPictures() 可能会减慢 UIThread 的速度,这可能是您一开始看不到进度对话框的原因,并且在加载完成后立即关闭它。
  4. 我还猜测您得到了一个 ANR 对话框(应用程序未响应)或者您看到很多 Skipped X 帧!应用程序可能在其主线程上做了太多工作。 logcat 输出中的消息。

我的建议以及根据您的 loadPictures() 方法实际执行的操作:使用 AsyncTask 或者,当您访问服务器以获取图片时,检查像 Volley 这样的库或 RetroFit 并使用它们来获取数据。

关于android - 加载图片时不显示进度对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24609974/

相关文章:

java - 是否可以使用 SWT 显示默认的 Windows 进度对话框

java - 移动视觉条码扫描器 : Why does SurfaceView not update CameraSource?

java - 以不同步的方式改变对象的两个不同部分不安全吗?

android - ndk-构建错误.opencv2/core/core.hpp : No such file or directory

c# - 异步 Web Request、EntityFramework 和 DI,是如何工作的?

c# - 主线程完成后子线程不工作

java - 在 PreferenceActivity 中显示 ProgressDialog

android - Android 中新 Activity 的 ProgressDialog

android - Android 应用程序无法打开手电筒/手电筒

android - 如何在 Android 上将对象从一个 Activity 传递到另一个 Activity ?