安卓 - 什么是Handler消息?

3

我在谈论这个类

主要文档说明如下:

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

  • 因此,我认为这是不同线程之间的某种通信,可能是Bundle

  • 主要文档中也有一些片段。但我无法看出它们是如何构建以及它们的结构是什么。

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


我希望能看到一个简单紧凑的示例,展示何时以及如何使用它们。


当你学习处理程序时,理解消息类的作用就变得有意义了。 - OneCricketeer
我已经使用了Handlers,我知道它们有自己的handleMessage()方法,但我还没有真正需要使用Messages。 - Evin1_
2个回答

6
我认为这是不同线程之间的某种通信。您可以将一个“Handler”附加到主应用程序线程(也称为UI线程),并为其他具有关联“Handler”的线程创建单独的“HandlerThread”实例。一条线程可以通过“Handler”发送消息,在“handleMessage()”方法中,“Handler”将在其自己的线程中处理消息。例如,常规后台线程可以将其工作结果(例如下载数据)打包成“Message”,然后将其传递给附加到主应用程序线程的“Handler”。该“Handler”将在主应用程序线程上调用“handleMessage()”以获取“Message”,然后可以使用来自后台线程的数据安全地更新UI。这是Android中非常低级别的线程间通信方式。更常见的做法是使用类似事件总线的高级别工具。SharedPreferences用于数据存储,而非线程间通信。虽然单例可以提供数据的集中点,但它本身并不提供任何形式的线程间通信。对于99%的Android开发者来说,答案是:不要使用它们。使用构建在“Handler”和“Message”之上的东西,例如AsyncTask、LocalBroadcastManager、Square的Otto、greenrobot的EventBus等。

谢谢!其他1%需要什么问题才能真正使用它? - Evin1_
2
@Evin1_:他们就是那些编写AsyncTaskLocalBroadcastManager、Otto等内容的人。 :-) - CommonsWare

1
一个线程只能有一个处理器和一个消息队列,消息是一些任意的数据,由处理器放在它的消息队列上处理,消息队列循环每个消息并处理直到没有更多消息,所有数据都是灵活的并尽快执行,不需要保存在硬盘上,这是低级代码,你不经常使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接