AMS学习1--广播的回调

一直没有系统的学习过AMS,ActivityManagerService的代码较多,功能也比较繁琐。

记得以前对所谓的“四大组件”都没有概念,平时接触过后,才有些理解,比如在蓝牙的使用练习里,就可以了解到广播的使用,进而可以深刻的理解广播,然后展开其实现原理,本质是观察者模式的注册和回调。

//activity的学习可以从应用的打开过程作为入手点,从dumpsys meminfo 这样的流程了解AMS中//的IApplicationThread代理对象对app的访问。

在BroadcastReceiver的onReceive方法里添加log,我们可以发现,是执行在主进程中的,

这个引起了我的注意,touch事件是回调在主进程,sensor事件也是,广播回调又是怎样的处理呢,

过程比较复杂,这里说说大概流程,AMS通过IApplicationThread这个app的代理对象来进行调用,执行到app进程中,(这个时候是在ApplicationThread这个binder线程里)

app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,
                            data, extras, ordered, sticky, sendingUser, app.repProcState);
最终调用到广播binder对象的

ReceiverDispatcher.performReceive方法里,里面post到主进程。

原理看上去比较清楚,binder回调,再post到主进程,比较文明的方式到主进程,不像input数据那样“野蛮”--采用注册fd回调的方式进行callback。

但流程很多,有些复杂。

参考资料

Android 广播内部机制详解(三)_渔人爱编程的博客-CSDN博客_java广播机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值