彩神大发排列五_神彩大发排列五官方 - 彩神大发排列五,神彩大发排列五官方是新浪网最重要的频道之一,24小时滚动报道国内、国际及社会新闻。每日编发新闻数以万计。

BroadcastReceiver的源码分析

  • 时间:
  • 浏览:1

scheduleBroadcastsLocked刚始于进行广播发送

APK安装流程

最终调用了Args.run

PMS.scanPackageDirtyLI注册静态广播

Activity通过registerReceiver法律措施进行广播注册,注册流程如下:

Handler消息最终调用了BroadcastQueue.processNextBroadcast,怎么让 调用了performReceiveLocked,

其中installPackageLI完成了Apk的解析,生成了Package对象,scanPackageLi包括四大组件注册这类的操作。

Args.run通过类加载器加载Receiver对象,并最终调用onReceive函数,至此,广播发送完成。

android提供静态和动态五种法律措施进行消息注册,静态注册指的是在AndroidManifest.xml中进行注册,动态注册指的是在Activity通过registerReceiver的法律措施进行广播注册。

IItentReceiver.performReceiver

BroadcastQueue.scheduleBroadcastsLocked

发送广播最终走到了AMS.broadcastIntentLocked,其中核心的代码如下所示:

registerReceiver流程

processNextBroadcast调用了performReceiverLocked

AMS.broadcastIntentLocked

AMS.registerReceiver

Args.run

sendBroascast流程

android提供了广播机制,通过BroadcastReceiver还要能在不同的tcp连接间传递消息。这类于观察者模式,A应用通过注册广播表示A对消息subject感兴趣,当B应用发出subject类型的消息的日后,A应用就能收到对应的消息。

ContextImpl.registerReceiverInternal

该函数根据BroadcastReceiver对象生成IIntentReceiver对象,该对象和ApplicationThread的功能一样,试想一下,APPtcp连接向AMStcp连接注册广播,当AMS收到广播向APPtcp连接整理需要要用到Binder调用,IIntentReceiver并且进行跨tcp连接调用的。

广播整理

解析到APK里的静态广播会注册到PMS的mReceivers对象中,mReceivers类型为ActivityIntentResolver。

performReceiverLocked

broadcastIntentLocked中receivers表示静态注册的广播,通过collectReceiverComponents从PMS那里获取;registerdReceivers表示动态注册的广播,从mReceiverResolver那里获取。在获取到要接受所有广播后,就调用如下函数进行广播整理。

performReceiverLocked继续调用IItentReceiver.performReceiver,该调用的Binder法律措施,

AMS将IIntentReceiver保存到mReisterdReceivers中,最终保存到mReceiverResolver.addFilter(bf);中。

processNextBroadcast

静态广播注册指的是在AndroidManifest.xml注册Receiver,当Apk安装都会将静态注册的Receiver信息注册到PMS中,APK的安装流程(https://www.jianshu.com/p/953475cea991)如下: