【问题标题】:Android - What is a Handler Message?Android - 什么是处理程序消息?
【发布时间】:2016-05-08 13:45:16
【问题描述】:

我说的是this class

主要文档说明:

定义包含描述和任意数据对象的消息 可以发送给处理程序。该对象包含两个额外的 int 字段和一个额外的对象字段,允许您不进行分配 在很多情况下。

  • 所以我认为这是一种 不同的线程,可能是Bundle

  • 主文档中还有一个few snippets。但是我 看不到它们是如何建造的,它们的结构是什么。

  • 为什么要使用它们而不是使用SharedPreferences 或者Singleton 类?测试?


我希望看到一个关于何时以及如何使用它们的小而紧凑的示例。

【问题讨论】:

  • 了解 Handlers 也是有意义的,因为这就是 Message 类的用处
  • 我也用过 Handlers,我知道他们有自己的 handleMessage() 方法,但我还没有真正使用 Messages 的需要。

标签: java android multithreading performance


【解决方案1】:

所以我认为这是不同线程之间的某种通信

您可以将Handler 附加到主应用程序线程(也称为UI 线程),并且可以为具有关联Handler 实例的其他线程创建单独的HandlerThread 实例。

一个线程可以通过Handler 发送Message,其中Handler 将在handleMessage() 方法中在其自己的线程上处理Message。例如,常规后台Thread 可以将其工作结果(例如,下载的数据)打包到Message 中,并将其提供给附加到主应用程序线程的HandlerHandler 将获得handleMessage() 中的Message,在主应用程序线程上调用,然后可以使用来自后台线程的数据安全地更新 UI。

这是 Android 中非常低级的线程间通信方式。更多情况下,使用更高阶的东西会更好地为您服务,例如事件总线。

为什么要使用它们而不是使用 SharedPreferences

SharedPreferences 用于数据存储,不是线程间通信。

或者也许是一个单例类?

虽然单例可以提供数据的中心点,但它本身不提供任何类型的线程间通信。

我希望看到一个关于何时以及如何使用它们的小而紧凑的示例。

对于 99% 的 Android 开发者来说,答案是:不要使用它们。使用建立在HandlerMessage 之上的东西,例如:

  • AsyncTask
  • LocalBroadcastManager
  • Square 的奥托
  • greenrobot 的 EventBus

【讨论】:

  • 谢谢!为了实际使用它,另外 1% 会有什么问题?
  • @Evin1_:他们是写AsyncTaskLocalBroadcastManager、Otto 等内容的人:-)
【解决方案2】:

一个线程只能有一个处理程序和一个消息队列,消息是一些任意数据,由放在它的消息队列上的处理程序处理,消息队列循环每条消息并处理它们,直到它没有更多消息,所有数据都是用途广泛且尽快执行,无需将其保存在硬盘上,这是您不经常处理的低级代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多