Android - 什么是处理程序消息?

时间:2016-01-30 22:28:06

标签: java android multithreading performance

我在谈论this class

主要文件说明:

  

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

  • 所以我认为它之间是某种沟通 不同的主题,可能是Bundle

  • 主文档中还有few snippets。但是我 看不出他们是如何建造的以及他们的结构是什么。

  • 为什么要使用它们而不是使用SharedPreferencesSingleton类?测试

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

2 个答案:

答案 0 :(得分:5)

  

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

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

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

这是Android中非常低级别的线程间通信方式。更常见的是,使用更高级的东西,比如事件总线,你会得到更好的服务。

  

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

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

  

或者也许是Singleton类?

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

  

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

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

  • AsyncTask
  • LocalBroadcastManager
  • Square's Otto
  • greenrobot的EventBus

答案 1 :(得分:1)

一个线程只能有一个处理程序和一个messageQueue,一个消息是一个任意数据,由处理它的处理程序处理它的messageQueue,messageQueue循环每个消息并处理它们直到它没有更多的消息,所有数据都是通用的,并且尽快执行,无需将其保存在硬盘驱动器上,它的低级代码通常不会处理它