Handler机制
Handler的理解
Handler引入背景
在子线程里操作UI导致崩溃、在子线程弹Toast无反应。
多线程并发操作UI可能会导致安全问题,Android提供一种解决方法,只能在UI线程里操作UI。Handler机制能实现周期性修改UI。
类似还有事件总线。
Handler的作用
Handler机制主要用于解决多线程并发操作UI可能导致的安全问题。
用于在非UI线程更新UI。
线程间通信
Handler内部原理
UI线程,UI线程初始化,提供消息传送的环境.(创建一个Looper对象和MessageQueue队列)
Handler:主要用于发送消息和处理消息,在主线程中使用,隐式持有activity引用,所以可以操作UI。
MessageQueue:消息队列,先进先出的方式管理Message。伴随Looper的初始化而创建。
Message:消息的载体,Handler处理的对象。
Looper:创建管理MessageQueue,循环从队列中取出Message分发给Handler。
Handler执行流程
子线程修改UI->Handler发送消息(sendEmptyMessage等方法)->Message存入到MessageQueue队列->Looper取出Message分发给Handler->Handler处理消息(handleMessage方法)
在子线程使用Handler
主线程发送消息,子线程接收消息
1 | public class HandlerThread extends Thread { |
在子线程使用handler之HandlerThread
1 | HandlerThread handlerThread = new HandlerThread("666"); |