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

时间:2014-07-07 11:53:30

标签: 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,因为它会修改视图。 那么,为什么在图片加载时没有显示进度对话框?

1 个答案:

答案 0 :(得分:5)

我不是百分百肯定,但这是我的猜测:

  1. 你创建一个应该与UIThread分开运行的线程,但在你调用runOnUiThread()的内部,它将该线程与UIThread合并。
  2. 您创建一个runnable以在一个线程中运行,该线程创建一个在另一个线程上运行的runnable。我想你应该理解那个
  3. 的废话
  4. 您的loadPictures()可能会减慢UIThread的速度,这可能是您首先没有看到进度对话框的原因,加载完成后您就会将其解除。
  5. 我还猜你得到一个ANR对话框(应用程序没有响应),或者你在logcat输出中看到很多Skipped X frames! The application may be doing too much work on its main thread.个消息。
  6. 我的建议并取决于您的loadPictures()方法实际执行的操作:使用AsyncTask,或者当您访问服务器以获取图片时,请检查VolleyRetroFit等库并使用他们来获取数据。