前言
Handler机制,用于线程间通信,不单单是主线程与工作线程之间,任意两个线程间都可以,其中MessageQuque对象用于持有Message对象,相当的重要,MessageQueue类位于/android/os/MessageQueue.java文件中,今天一起学学MessageQueue的实现
![]()
构造方法分析
MessageQueue(boolean quitAllowed) {
mQuitAllowed = quitAllowed;
mPtr = nativeInit();
}
创建MessageQueue对象的构造方法,传入的参数quitAllowed,表示是否允许退出(线程在循环中,读取标志位决定能否结束)
MessageQueue对象用于持有Message对象,而MessageQueue对象本身则由Looper对象持有,在Looper中会调用该构造方法创建MessageQueue对象
1、保存是否允许退出的标志位
MessageQueue对象持有的mQuitAllowd实例变量中,保存了是否允许线程退出的标志位
2、保存一个指针吗?
MessageQueue对象持有的实例变量mPtr用于保存nativeInit方法的返回值
nativeInit()方法分析
private native static long nativeInit();
nativeInit()会返回一个long值,最终由JNI层访问C/C++层的代码完成调用,这个long值不得而知,后面补充一下
总结
1、MessageQueue对持有1个称为消息列表的单链表,单链表中的每一个元素都是Message对象
2、MessageQueue对象是在Looper的构造方法中创建的,即创建Looper对象时,Looper对象会持有一个MessageQueue对
3、Looper、Handler、Message、MessageQueue,在handler机制的java层中,可见MessageQueue的地位
4、当我们创建的MesageQueue对象允许退出时,执行线程会执行方法后正常结束,反之MessageQueue对象如果不允许退出,调用MessageQueue对象方法的线程,将不会得到结束的机会,比如主线程中创建的Looper对象持有的MessageQueue对象是不允许退出的,这刚好满足GUI应用的需求,主线程不退出,保证程序可以一直运行
深入理解MessageQueue机制
本文详细解析了Android中MessageQueue的构造方法与核心作用,探讨其在Handler机制中作为线程间通信桥梁的重要性,以及如何通过Looper对象创建并管理MessageQueue,确保应用程序主线程持续运行。
&spm=1001.2101.3001.5002&articleId=52859909&d=1&t=3&u=a296f2ae6d1c4f13a2f1b9df6003d028)
3828

被折叠的 条评论
为什么被折叠?



