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

Evi*_*n1_ 1 java performance multithreading android

我在谈论这堂课.

主要文件说明:

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

  • 所以我认为它是不同线程之间的某种通信,也许是一种Bundle

  • 主文档中还有一些片段.但我看不出他们是如何建造的以及他们的结构是什么.

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


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

Com*_*are 5

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

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

一个线程可以发送Message,通过Handler,其中Handler将处理Message在自己的线程,在handleMessage()方法.例如,常规背景Thread可以将其工作结果(例如,下载的数据)打包成a Message,并将其提供给Handler附加到主应用程序线程的.这Handler将得到MessagehandleMessage(),称为主应用程序线程,然后可以更新安全使用从后台线程数据的UI.

这是Android中一种非常低级的线程间通信方式.更常见的是,使用更高级的东西(比如事件总线)可以更好地服务.

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

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

或者也许是单身人士课程?

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

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

对于99%的Android开发人员来说,答案是:不要使用它们.使用的东西是建立在顶部HandlerMessage,如:

  • AsyncTask
  • LocalBroadcastManager
  • 广场的奥托
  • greenrobot的EventBus
  • 等等

  • @ Evin1_:他们是那些写"AsyncTask","LocalBroadcastManager",Otto等等的人:-) (2认同)