【问题标题】:Android UI Freezes instead of displaying ProgressDialogAndroid UI 冻结而不是显示 ProgressDialog
【发布时间】:2023-03-12 15:53:01
【问题描述】:

我正在尝试在下载数据期间显示进度对话框。

现在,这就是我所拥有的:

    final ProgressDialog pd = ProgressDialog.show(this, "Updating", "Loading...");
    Thread td = new Thread(new Runnable(){
        public void run(){
           //time consuming download
           pd.dismiss();
        }
     });
     td.start(); // start the thread and use join to wait for it to return

     td.join(); //wrapped in try catch not shown here

我不需要从下载中更新进度,并且在下载数据之前应用不应该做任何其他事情,这就是我使用 join 的原因 - 所以它会等待下载完成。

我得到的结果是

  1. 按钮
  2. 界面冻结
  3. 进度对话框闪烁,下载完成

我需要的是

  1. 按钮
  2. 进度对话框显示
  3. 进度对话框关闭,下载完成。

知道为什么它没有立即显示,而是在完成后闪烁吗?

【问题讨论】:

  • 为什么投反对票?我正在努力在这里学习。我的问题是坏的吗?
  • +1 我看不出有任何反对意见的理由!

标签: android multithreading progressdialog


【解决方案1】:

从未使用过join,但是当我阅读文档时,它说另一个线程(此处为 UI 线程)将被阻塞,直到工作线程完成。所以这很好地解释了你描述的行为。

请改用AsyncTask。在doInBackground 中下载并在onPostExecute 中处理结果,它会工作...

【讨论】:

    【解决方案2】:

    在后台处理下载的典型解决方案是使用 AsyncTask() 而不是线程。

    http://developer.android.com/reference/android/os/AsyncTask.html

    如果您遵循文档中的建议,您的进度对话框将正确显示。

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多