Android之MessageQueue源码分析(第一篇:创建对象)

前言

    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应用的需求,主线程不退出,保证程序可以一直运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值