美文网首页
Android Framework学习之动态广播的注册和收发原理

Android Framework学习之动态广播的注册和收发原理

作者: 一只二凡子 | 来源:发表于2022-12-13 16:52 被阅读0次

    说说动态广播的注册和收发原理

    IIntentReceiver: binder 对象,课跨进程传递,通过ActivityManagerNative.getDefault().registerReceiver(rd, filter, ...)传到AMS。

    同一个BroadcastReceiver和不同的Context,对应不同的IIntentReceiver

    以上是应用端注册广播

    下面是AMS处理注册部分

    ReceiverList:叫FilterList更合适

    BroadCastFilter extends IntentFilter

    一个IIntentReceiver可能对应多个IntentFilter:在一个activity里先用一个IntentFilter注册一个broadcast receiver,然后再用另外一个IntentFilter去注册同一个broadcast reciver,这样在AMS端一个IIntentReceiver就对应2个IntentFilter。

    mReceiverResolver:IntentResolver, 用来解析Intent看是否匹配

    广播注册原理完毕

    动态广播默认是无序的,ordered == false

    AMS里有两个BroadcastQueue,一个是分发紧急任务的,另一个是普通任务的

    BroadcastQueue有两个列表,一个发并行分发的(动态广播默认是并行分发),一个是串行分发的

    应用端自动将分发串行化,

    TYPE_COMPONENT:静态广播

    TYPE_UNREGISTERED:动态广播

    sendFinished:通知AMS广播执行完了

    应用A生成binder对象,向AMS注册广播,将binder对象和IntentFilter注册到AMS,应用B发送广播,广播里带了intent,AMS会在所有注册的Receiver里根据intent找到匹配的Receiver,然后就开始分发。对普通的动态广播,AMS是并行分发的,广播到了应用端是串行化分发,通过binder对象找到对应的broadcast receiver,然后执行它的onReceive函数。

    相关文章

      网友评论

          本文标题:Android Framework学习之动态广播的注册和收发原理

          本文链接:https://www.haomeiwen.com/subject/koihqdtx.html