我在谈论this class。
主要文件说明:
定义包含描述和任意数据对象的消息 可以发送给处理程序。该对象包含两个额外的int 字段和一个额外的对象字段,允许您不进行分配 在许多情况下。
所以我认为它之间是某种沟通
不同的主题,可能是Bundle
?
主文档中还有few snippets。但是我 看不出他们是如何建造的以及他们的结构是什么。
为什么要使用它们而不是使用SharedPreferences
或Singleton
类?测试
我希望看到关于何时以及如何使用它们的一个小而紧凑的例子。
答案 0 :(得分:5)
所以我认为它是不同线程之间的某种通信
您可以将Handler
附加到主应用程序线程(也称为UI线程),并且可以为具有关联HandlerThread
实例的其他线程创建单独的Handler
实例。
一个帖子可以通过Message
发送Handler
,其中Handler
将在Message
方法中处理handleMessage()
在其自己的线程上。例如,常规背景Thread
可以将其工作结果(例如,下载的数据)打包到Message
中,并将其提供给附加到主应用程序线程的Handler
。 Handler
将在Message
中获取handleMessage()
,在主应用程序线程上调用,然后可以使用后台线程中的数据安全地更新UI。
这是Android中非常低级别的线程间通信方式。更常见的是,使用更高级的东西,比如事件总线,你会得到更好的服务。
为什么要使用它们而不是使用SharedPreferences
SharedPreferences
用于数据存储,而不是线程间通信。
或者也许是Singleton类?
虽然单例可以提供数据的中心点,但它本身并不提供任何类型的线程间通信。
我希望看到关于何时以及如何使用它们的一个小而紧凑的例子。
对于99%的Android开发者来说,答案是:不要使用它们。使用构建在Handler
和Message
之上的内容,例如:
AsyncTask
LocalBroadcastManager
答案 1 :(得分:1)
一个线程只能有一个处理程序和一个messageQueue,一个消息是一个任意数据,由处理它的处理程序处理它的messageQueue,messageQueue循环每个消息并处理它们直到它没有更多的消息,所有数据都是通用的,并且尽快执行,无需将其保存在硬盘驱动器上,它的低级代码通常不会处理它