首页 > 编程知识 正文

android应用程序的四大组件,安卓四大组件分别有什么功能

时间:2023-05-05 08:10:51 阅读:161401 作者:3200

广播注册有静态注册和动态注册两种。 静态注册是指在AndroidMenifest.xml文件中进行注册。 静态注册是指在安装APP应用程序时,系统通过PMS完成整个注册。 动态注册是指通过代码实现注册过程。

动态注册广播的代码最终调用了contextImpl的方法。 代码路径如下所示: frameworks/base/core/Java/Android/app/context impl.Java

然后到AMS的路径: frameworks/base/services/core/Java/com/Android/server/am/activitymanagerservice.Java

AMS的registerReceiver方法主要存储我们传递的IIntentReceiver对象。 代码如下所示。

至此,广播动态注册过程完成。

接下来,我们来看看发送广播的过程。 发送广播的过程的代码在ContextImpl中实现

还是返回contextImpl,代码如下所示。

AMS的broadcastIntent中有以下代码行:

调用了broadcastIntentLocked方法。 在broadcastIntentLocked中,如下所示:

然后来到BroadcastQueue的scheduleBroadcastsLocked代码路径如下:

frameworks/base/services/core/Java/com/Android/server/am/broadcast queue.Java

虽然这种方法主要发送了消息,但接下来我们来看看对该消息的处理:

在消息处理中,主要调用了此方法。 接下来,我们来看看这个方法:

delivertoregisteredreceiverlocked方法使用以下代码完成发送行为:

接下来,我们来看看performReceiveLocked这种方法的具体实现。

您可以看到您调用了ApplicationThread的scheduleRegisteredReceiver。 代码如下所示。

可以看到在这段代码中调用了IIntentReceiver的performReceive方法。 正如我之前提到的,IIntentReceiver是为了在进程之间通信从本地Receive转换的Binder。 在上面的performReceiver中调用的加载apk的ReceiverDispatcher的performReceive方法代码如下:

此方法在mActivityThread的post方法中执行Args。

所以他用h的post把这个args发送到主线程运行,接下来看看args的例子。 代码如下所示。

可以看到Args实现了Runnable接口,他的run方法调用BroadReceiver的onReceive方法

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。