Android系统中出于性能优化考虑,AndroidUI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这个问题,Android制定了一条简单的原则,只允许UI线程(亦即主线程)修改Activity中的UI组件。但实际上,有部分UI需要在子线程中控制其修改逻辑,因此子线程需要通过handler通知主线程修改UI,实现线程间通信。(在游戏开发中尤其常见,例如需要让新启动的线程周期性的改变UI,或者实现文件下载等。)

Handler机制主要包括四个关键对象,分别是:MessageHandlerMessageQueueLooper。下面对这四个关键对象进行简要的介绍。

1Message

Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Messagewhat字段可以用来携带一些整型数据,obj字段可以用来携带一个Object对象。

2Handler

Handler顾名思义就是处理者的意思,它主要用于发送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的handlerMessage()方法中。

3MessageQueue

MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。

4Looper

Looper是每个线程中的MessageQueue的管家。调用Looperloop()方法后,就会循环检查MessageQueue中是否有消息,如果MessageQueue中存在一条消息,就会将它取出,并传递到HandlerhandlerMessage()方法中。此外每个线程也只会有一个Looper对象。在主线程中创建Handler对象时,系统已经为我们创建了Looper对象,所以不用手动创建Looper对象,而在子线程中创建Handler对象时,我们需要调用Looper.prepare()方法创建一个消息循环,最后调用 Looper.loop()使消息循环起作用,从消息队列中取消息,处理消息。

更多相关文章

  1. 阿里巴巴的FastJson数据解析介绍
  2. Android重拾 — handle
  3. Android仿人人客户端(v5.7.1)——消息中心视图的实现
  4. Android(安卓)轻松实现仿QQ消息下拉刷新
  5. Android(安卓)binder from Top to Bottom
  6. Android(安卓)中Activity,Window和View之间的关系
  7. 在 Android(安卓)中使用 Java8 的特性!
  8. Android(安卓)使用 aidl 文件创建服务示例
  9. java/android 设计模式学习笔记(1)---单例模式

随机推荐

  1. Android之WebView教程实例汇总
  2. Ubuntu编译Android整个系统以及编译指定
  3. Unable to resolve target 'android-5'
  4. Android(安卓)Studio com.android.suppor
  5. Android(安卓)Dialog的使用
  6. android 状态栏背景修改为透明
  7. Android的快速开发框架 afinal
  8. Android(安卓)学习笔记--android――Acti
  9. Android(安卓)Dev - Using Eclipse
  10. android 设置Button或者ImageButton的背