【问题标题】:Cannot get ProgressDialog to display in Thread无法让 ProgressDialog 在线程中显示
【发布时间】:2011-04-07 03:24:12
【问题描述】:

好吧,我在尝试让它发挥作用时看到了各种各样的失败。我有一个通过 Activity 启动的线程。线程需要创建/显示进度对话框并关闭它们。

当我尝试直接显示 ProgressDialog 时,我收到了一个错误,即我的 Looper 没有准备好。我用 Looper 查了一下是一个实现的。但是,我必须调用 Looper.loop 才能显示进度对话框。在它出现后,应用程序在这一点上冻结了,再也无法通过 Looper.loop 调用。

我无法让它工作,所以寻找一种使用 HandlerThread 和 Handler 的全新方法。我创建了一个 HandlerThread 并启动它。我从线程中获取 looper 并用它创建一个处理程序。我的 ProgressDialog 或 Toasts 根本不会出现。

有没有更简单的方法来做到这一点?

【问题讨论】:

  • 你能把你的代码贴在这里吗...

标签: android multithreading handler progressdialog


【解决方案1】:

你可以有一个

private Handler stopProgressHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {         
        setProgressBarIndeterminateVisibility(false);
    }
};
private Handler startProgressHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {         
        setProgressBarIndeterminateVisibility(true);
    }
};

这样当你启动线程时启动progressbar,在线程完成后你可以停止progressbar

 public void closeProgressbar(){
    //bluetoothconnector.onDestroy();
    stopProgressHandler.sendEmptyMessage(0);
 }
public void openProgressbar(){
    //bluetoothconnector.onDestroy();
    startProgressHandler.sendEmptyMessage(0);
 }

这将有助于调用progressbar 来启动和停止。这将是解决方案之一。

【讨论】:

    【解决方案2】:

    不确定 ProgressDialog,但据我所知,Android 中所有与 UI 相关的东西都需要在 UI Thread 中更新。实际上有一个简单的帮助类来实现异步任务:http://developer.android.com/reference/android/os/AsyncTask.html

    或者,您可以创建一个处理程序(将在 UI 线程上)并使用它创建对话框:

    Handler uiHandler;
    //Activity onCreate
    onCreate(...){
        uiHandler = new Handler();
    }
    
    // Somewhere in your other thread, 
    uiHandler.postRunnable(new Runnable(){
        @Override
        public void run(){
           // Create or update dialog
           ...
        }
    });
    

    【讨论】:

    【解决方案3】:

    最后一个答案是错误的......

    应该是:

    setProgressBarIndeterminateVisibility(Boolean.TRUE | Boolean.FALSE);

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多