再看Handler消息传递机制原理
关于handler实现原理的几个问题 源码分析 1.消息队列的数据结构和实现方式; 2.如何保持线程状态,不被销毁; 3.Message如何优先执行以及确保线程安全; 4.如何直接在主线程中执行 5.关于队列,我常用的实现方式 以下将根据源码来具体谈谈这几个问题,源码使用SDK 28。 实现原理主要包含下面几个类: MessageQueue :消息队列,在构造方法里初始化Native,持有队列第一个Message,循环遍历队列,队列为 空时阻塞线程。 Handler :发送和处理Message类,包含同步和异步、异步阻塞等结果,获取Message(通过 Message.obtain复用Message) Message :消息的实体类,包含下一个Message,并有一个静态的Message复用池,还有一些初始化参数等。 Looper :为当前线程创建MessageQueue,并遍历消息队列。 先说一下流程: 1 .Looper.prepare()为当前线程创建MessageQueue,Looper.loop()调用MessageQueue.next()方法遍历消息队列 (注:队列为空时next()方法会阻塞); 2 .Handler.sendMessage()方法调用MessageQueue.enqueueMessage()方法按照时间顺序向消息队列里面添加Message