Android基础架构:Native层 Looper、Handler、Message 研究


Android基础架构:Native层 Looper、Handler、Message 研究

1,参考:
https://www.cnblogs.com/roger-yu/p/15099541.html
Android Native -- Message/Handler/Looper机制(原理篇)

2,代码:
system/core/libutils/include/utils/Looper.h
system/core/libutils/Looper.cpp

3,涉及到的Linux基础,系统调用API:
eventfd
epoll // epoll事件轮询机制应用很广泛,比如Android的input模块也是基于此,很多架构基于此。
pthread

4,中英文对照:
poll: 轮询
epoll: 全称 event poll 事件轮询
looper: 循环器
loop: 环形,循环,环路
handler: 处理程序,处理器,处理者
message: 消息

5,Looper、Handler、Message
linux的epoll已经提供了事件轮询机制,仅仅只是事件轮询机制,具体轮询什么事件内容,
需要程序员自己定义。
Looper就是基于epoll,指定了要轮询内容为Message消息,并且通过控制反转,
把Message消息的处理也交给发送Message消息的客户端处理。
所以,Looper 也称为 消息循环器 或 消息循环机。

6,架构模型
控制器 + 处理器 + 内容容器 + 内容的增删改查算法 模型
或
逻辑控制器 + 业务处理器 + 内容容器 + 内容的增删改查算法 模型

控制器:
Looper是Message消息循环控制器,以时间排序轮询Message消息。
处理器:
Handler是处理器,处理的内容是Message消息,也称为 Message消息处理器。
内容容器:
Message是消息,内容容器
算法:内容的增删改查算法

7,Looper、Handler、Message运行机制
Handler处理器--投递Message消息->控制器-轮询Message消息->找到当前时间要处理的Message消息
->Handler处理器处理Message消息。
简化:
Handler业务处理器-Message消息->Looper消息循环控制器-控制反转->Handler业务处理器处理Message消息

8、Looper不仅可以轮询Message,也支持addFd,轮询fd,并回调
C++层使用Looper的demo:
sendMessage()方式:如SurfaceFlinger中的demo 在 frameworks/native/services/surfaceflinger目录
addFd()方式: 如input模块的demo 在frameworks/native/services/inputflinger目录

通过grep -r -E "sendMessage|addFd" --include *.cpp --include *.h --color


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值