java - 如何从 UI 线程以外的线程显示对话框

标签 java android

我的应用程序需要读取 GPS,因此在主线程上我启动了一个读取 GPS 的线程,但我无法显示一个显示“请稍候”的对话框。我也使用处理程序进行绑定(bind),但这也不起作用。从第二个线程控制“请稍候”对话框的最佳方法是什么?谢谢!

public void showWaitDialog() {

    prgDialog = new ProgressDialog(context);
    prgDialog.setTitle("Please wait.");
    prgDialog.setMessage("Please wait.");
    prgDialog.setCancelable(false);
    prgDialog.show();


}

最佳答案

您可以:

  • 在您的 UI 线程(例如,在 Activity)中定义一个 Handler,然后将其传递给您的线程。现在从您调用 handler.post(runnable) 的线程中排队要在 UIThread 上执行的代码。

  • 在您的 Activity 中定义一个 BroadcastReceiver 并从您的线程发送一个 Intent 以及 Bundle 中的必要信息

  • 使用 AsyncTask 和方法 publishProgress()、onProgressUpdate()onPostExecute() 通知 Activity 进度或任务何时完成

  • 使用runOnUiThread

这取决于您的需求。对于短期运行的异步操作,AsyncTask 是一个不错的选择。

关于java - 如何从 UI 线程以外的线程显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17798780/

相关文章:

java - 对于参数类型 boolean、double,运算符 > 未定义

java - 如何在 Websphere Application Server v8.0 中查找发布路径

android - 通过 Android 中的 WhatsApp 向特定联系人发送消息

java - 与 Smack 4.2 重新连接后发送离线消息时,经过身份验证的监听器出现异常

java - 改造图片上传返回错误请求400

java - 已删除的项目仍显示在“结果”页面上。

java - 我提示输入字符串,但在提示执行之前收到越界异常

java - Spring bean 范围 : session and globalSession

java - JSqlParser - 从列中获取表名

安卓 : disable Text View links