如何在Android UI线程中异步执行一些代码?

2023-11-25

我是 Android 开发新手。我从事 Swing 和 SWT 工作已有好几年了。 Swing 和 SWT 都有在 UI 线程同步和异步执行代码的策略。典型的用法是在一个线程中执行一些耗时的工作,然后在 UI 线程异步中显示结果。

所以我的问题是,Android 中有类似的策略吗?这是我的代码。参数runnable是一些耗时的代码。此方法将在执行期间显示一个等待对话框,然后期望在完成后显示一个 Toast。但是Toast需要在UI线程中显示。那么如何做到这一点呢?

    public static void showWaitingDialog(final Activity parent, final Runnable runnable, String msg) {

    if (StringUtils.isEmpty(msg)) {
        msg = "processing...";
    }

    final ProgressDialog waitingDialog = ProgressDialog.show(parent, "Please Wait...", msg, true);

    // execute in a new thread instead of UI thread
    ThreadPoolUtil.execute(new Runnable() {

        public void run() {
            try {
                // some time-consume operation
                runnable.run();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                waitingDialog.dismiss();
            }
            // TODO: How to display a Toast message here? execute some code in UI Thread.

        }

    });

}

还有关于Android UI系统的介绍吗?比如它是否是线程安全的,线程如何协同工作等等。非常感谢!


有几种方法可以做到这一点,

  • 异步任务 -

AsyncTask 可以正确且轻松地使用 UI 线程。这个班 允许执行后台操作并在 UI 上发布结果 线程而无需操作线程和/或处理程序。Example for using AsyncTask

  • Service -

服务是一个应用程序组件,代表 应用程序希望执行长时间运行的操作而不 与用户交互或为其他人提供功能 要使用的应用程序。Example for Using Service.

  • 意向服务 -

IntentService 是处理异步服务的基类 按需请求(表示为意图)。客户发送请求 通过startService(Intent)调用;该服务根据需要启动, 使用工作线程依次处理每个 Intent,并自行停止 当它没有工作的时候。Example for using IntentService.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Android UI线程中异步执行一些代码? 的相关文章

随机推荐

  • Windows 应用程序安装程序框架

    可下载的应用程序会提供多种类型的安装程序 这对我来说总是很奇怪 例如 有时您可以选择 exe 或 msi 某些类型的安装人员是否比其他类型有优势 你选择哪一个很重要吗 作为开发人员 为什么我要向我的用户提供不同的安装程序 exe 和 msi
  • 如何使用 C# 在单个请求中从 Azure Blob 存储下载多个文件?

    我需要从 Azure Blob 存储下载 1000 个小图像 我不想为每个文件提出单独的请求 在 C 中如何做到这一点 现在我正在使用Azure Storage Blobs and Azure Storage Blobs Batch但他们都
  • LDAP协议是否限制DN的长度

    LDAP 协议是否指定 DN 可以采用的最大长度 我已经看过了https www rfc editor org rfc rfc4514但我找不到它施加的任何限制 大多数 LDAP DN 的实现通常达到 256 个字符 我认为这仍然来自 X
  • 如何创建一个可以带参数或不带参数使用的装饰器?

    我想创建一个可以与参数一起使用的 Python 装饰器 redirect output somewhere log def foo 或没有它们 例如默认将输出重定向到 stderr redirect output def foo 这有可能吗
  • css 不透明度在 IE7 中不起作用

    我有这个测试页面 http jsfiddle net VWnm9 7 在我所有运行 IE7 或 IE8 的计算机上 图像都正确褪色 除了一台运行 IE7 的计算机 并且即使在 noext 模式下 花朵也不会褪色 该页面是
  • NodeJS:处理 TCP 套接字流的正确方法是什么?我应该使用哪个分隔符?

    据我了解here V8 有一个分代垃圾收集器 随机移动对象 节点无法获取指向原始字符串数据的指针以写入套接字 所以我不应该将来自 TCP 流的数据存储在字符串中 特别是如果该字符串变得大于Math pow 2 16 字节 希望到目前为止我都
  • NSUserDefaults 不保存

    我的精灵套件应用程序遇到问题 我的NSUserDefaults变量不起作用 在createSceneContents 我知道正在被调用 if defaults objectForKey obj difficultyLabel text Di
  • 如何在 DOM 中移动 iFrame 而不丢失其状态?

    看一下这个简单的 HTML div div div div 假设我想移动包装 以便 wrap2将在之前 wrap1 iframe 被 JavaScript 污染了 我知道 jQuery insertAfter and insertBefor
  • C# 中跨类的静态变量初始化顺序是什么?

    DependencyProperty AddOwner MSDN 页面提供了一个示例 其中两个类具有静态成员 其中一个类的成员依赖于另一个类的成员进行初始化 我认为MSDN是错误的 静态变量的初始化顺序在C 中不可靠就像 C 中一样或其他任
  • 如何在jquery中replaceWith('something')后获取对象的实际内容

    我有这个代码 document ready function selector click function obj this obj replaceWith div class size whats up man div alert ob
  • Bash 函数中 return 和 exit 的区别

    两者有什么区别return and exitBash 函数中关于退出代码的声明 From man bash on return n 导致函数停止执行并将 n 指定的值返回给其调用者 如果省略 n 则返回状态为函数体中最后执行的命令的状态 o
  • 如何使用 Angular 2 组件动态添加innerHTML

    我正在为组件库创建文档 我想要 1 个 html 字符串来生成页面上的组件及其文档 我想要的是 我拥有的 当我检查 HTML 时 my button 标签不存在 当我使用innerHTML 时 它们被删除 我的组件代码 private fl
  • 连接到远程sqlite3数据库

    我可以使用以下命令创建到本地 sqlite3 数据库的连接 使用 Mac OS X 10 5 和 Python 2 5 1 conn sqlite3 connect db MyDb 如果该数据库位于服务器上 例如 运行 Ubuntu 8 0
  • 在nodejs中解析JSON

    嗨 我有下面的 json id 12 data 123556 details name alan age 12 我用下面的代码来解析 var chunk id 12 data 123556 details name alan age 12
  • 如何在 qWeb 报告、Odoo 中设置 PDF 名称?

    我正在 Odoo 8 中使用 qWeb 制作报告 这些生成的 PDF 文件以 默认 名称保存 我想为每个生成的文件设置一个特定的名称 不是在保存文件之后 而是在 生成 时间 那可能吗 如果是的话 该怎么办呢 提前致谢 在 Odoo 8 中
  • 未检测到的 Chromedriver 未正确加载

    我正在尝试使用带有 selenium 的无头 chrome 浏览器 它也绕过了机器人检测测试 目前使用以下项目https github com ultrafunkamsterdam unDetected chromedriver每次我尝试实
  • 使用 ffmpeg_extract_subclip 提取视频的一部分 - 黑帧

    我正在尝试使用 ffmpeg extract subclip 用于提取视频的一部分 我面临着一些问题 1 当我剪切小视频 1 3秒 时 出现黑帧 只有音频在工作 2 当我剪切较长的视频时 输出的视频在结束前卡住了2 3秒 这是我的简单代码
  • iPhone 上的 UIWebView 电话链接检测

    我的代码中有一些奇怪的东西 我肯定会忘记一些事情 但我不知道是什么 我尝试在 UIWebView 中处理电话 短信邮件和 http 链接 这就是我尝试的方法 1 实例化 UIWebView webview UIWebView alloc i
  • 如何在 ggplot2 的轴标签中同时使用上标和变量

    我想一起使用一个变量 此处为向量元素 类型 和一个在 n 轴标签内包含上标 此处为 m 2 的单位 data lt list houses data frame surface c 450 320 280 price c 12 14 6 f
  • 如何在Android UI线程中异步执行一些代码?

    我是 Android 开发新手 我从事 Swing 和 SWT 工作已有好几年了 Swing 和 SWT 都有在 UI 线程同步和异步执行代码的策略 典型的用法是在一个线程中执行一些耗时的工作 然后在 UI 线程异步中显示结果 所以我的问题