Android消息机制 Handler,MessageQueue,Looper

因为UI控件不是线程安全的所以不能在子线程中访问UI

为什么不加上锁机制:会让UI的访问逻辑变得复杂,其次会降低UI的访问效率因为锁机制会阻塞某些线程的执行

基于以上采用了单线程模型处理UI操作并使用Handler切换UI执行线程

  • MessageQueue:

在looper的构造函数中创建

        数据结构:名字是消息队列其实是一个单链表的数据结构存储消息队列(在插入和删除上比较有优势)

        方法:

        enqueuemessage:插入消息

        next:读取并删除消息

  • Looper:

创建looper

方法:quit(直接退出)和quitSafaly(messagequeue中的已有消息处理完才安全退出)

looper退出后Handler发送的消息会失败,send方法会返回false

 

线程默认没有looper,主线程创建时就会初始化looper

ThreadLocal:

用来存储不同线程中的数据,不同线程访问同一个ThreadLocal的get方法,ThreadLocal内部会从各自的线程中取出一个数组,然后再从数组中根据当前ThreadLocal的索引去查找对应的value值

set方法:

 通过values方法获取当前线程中的ThreadLocal数据

get方法:

  • Handler:

方法:

send和post(最终也是通过send完成)

内容来自《android开发艺术探索》

内容补充:

面试:Android消息机制补充_nativepollonce_沙漠一只雕得儿得儿的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值