Android App开发中通知线程信息Activity

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

为 Android 应用程序开发创建多线程应用程序对许多 Android 开发人员来说是一项具有挑战性的任务。单线程和多线程方法用于创建复杂的 Android 企业移动应用程序,因为它们有助于简化代码的功能操作。但有时需要从后台线程更新 UI,了解所执行的操作。如果您曾经尝试从后台线程访问 UI 元素,您已经注意到会抛出异常。本文将解释如何用另一个线程发布的信息通知活动。

对于创建多线程应用程序,Android 默认不允许开发人员在主线程之外修改 UI。许多编码人员都面临这个问题,如果您仍然设法做到这一点,那么您将违反单线程模型的第二条规则,即“ 不要从 UI 线程外部访问 Android UI 工具包 ”,如此处所述 http //developer.android.com/guide/components/processes-and-threads.html

问题

在企业 Android 应用中创建复杂的多线程功能时,这些线程生成的信息不会在 UI 中通知,导致应用业务逻辑不匹配和应用程序崩溃。

解决方案

  • 实现一个 Handler 类,重写 handleMessage() 方法,该方法将从线程队列中读取消息

  • 在工作线程中使用 sendMessage() 方法发送下一条消息

有很多情况需要有一个线程在后台运行,并向主 Activity 的 UI 线程发送信息。从架构层面,我们可以使用两种不同的方法来通知线程活动。

  1. Android AsyncTask 类的使用

  2. 开始一个新线程

    使用 AsyncTask 非常方便,因为可能会出现您确实需要自己构建工作线程的情况。在这种情况下,您需要将一些信息发送回 Activity 线程。请记住,如上所述,Android 不允许其他线程修改主 UI 线程的任何内容。相反,您需要将数据包装到消息中并通过消息队列发送它们。
    您可以分两部分实现此操作:

第 1 部分 – 添加处理程序

Handler 类的实例添加到您的 MapActivity 实例。


 public class MyMap extends MapActivity {
. . . .
public Handler _handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, String.format("Handler.handleMessage(): msg=%s", msg));
// This is where main activity thread receives messages
// Put here your handling of incoming messages posted by other threads
super.handleMessage(msg);
}
};
. . . .
}

第 2 部分 – 发布消息

在工作线程中,只要您需要将 处理程序 类实例添加到您的 MapActivity 实例,就会向活动主队列发布一条消息。


 public class MyMap extends MapActivity {
. . . .
public Handler _handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, String.format("Handler.handleMessage(): msg=%s", msg));
// This is where main activity thread receives messages
// Put here your handling of incoming messages posted by other threads
super.handleMessage(msg);
}
};
. . . .
}

试试上面的代码,如果仍然无法通知活动信息,请随时联系。

请查看我们解释 移动应用程序测试的博客:最佳实践 。并查看我们的 Android 移动应用程序开发 和测试服务。