android handler封装_写个C++版本来理解Andriod的Handler机制

ff92808c-2930-eb11-8da9-e4434bdf6706.png

由于日常工作不需要经常写android上层应用,对Android的Handler机制一直处于模模糊糊的状态。使用Handler之后,回去写c++代码时,时刻怀念Android里面的Handler,希望有一个c++版本的Handler。为了能自己实现c++版本的Handler,今天准备去梳理一下这Android中的Handler。

由于在手机上看代码格式很乱,建议用电脑查看。

理解Android中的Handler

Handler的适用场景

只要写多线程程序,必不可少要碰到线程通信的问题。其中一个办法就是在工作线程中开辟一个消息队列,别的线程往消息队列发消息,即可完成与本线程的通信。工作线程顺序的从消息队列中读取消息并逐一处理。这种模型的好处是:

  • 消息可以缓存
  • 工作线程中消息是顺序处理的,所以不需要加锁。

Handler适用的就是这种场景:多个线程往一个工作线程发消息,工作线程顺序挨个处理。

Android中的Handler

google设计Handler最初的原因:

在安卓应用中,多个线程去处理UI的刷新,而UI操作不是线程安全的,如果要实现多线程对UI的操作,就需要在每一个要进行UI操作的地方进行加锁。

加锁操作引入的问题:

  • 锁的管理复杂,开发者容易忘记加锁,解锁,或者乱加锁造成死锁
  • 加锁是有性能消耗的
  • Android选用java作为开发语言就是看中其开发效率,引入锁加大开发难度了!

因此UI操作就该由一个单一线程进行处理,在Android中,UI线程就是应用进程的第一个线程--主线程。所以每一个android应用的开发者都会被告诫:不要在主线程里搞事情阻塞UI处理。

为了简化操作,google设计了Handler机制,开发者只需要创建一个Handler,然后在别的线程利用主线程的handler发送消息即可完成与主线程的通信。

Handler, Looper, Thread ,Message之间的关系

  • Looper: 用来管理消息队列的,它提供一个loop()接口,不停的从消息队列中取消息来处理。
  • Thread: 是Looper运行的载体,一个Thread有且只有一个Looper。
  • Handler: 是用来往运行与Thread里的Looper的消息队列发消息用的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值