第九章 四大组件的工作过程—学习笔记

四大组件运行状态

四大组件除了BroadcastReceiver,其他三个组件都必要在AndroidManifest中注册。对于BR来说可以在配置文件中注册,也可以在代码中注册。调用方式上,Activity、Service、BR需要借助Intent,而ContentProvider则不需借助Intent。

Activity是展示型组件,向用户提供一个界面。可以接受用户的输入信息从而进行交互。
Service是一种计算型组件,用户在后台执行一系列的计算任务。用户无法感知到它的存在。它默认是在主线程中运行,如果是耗时的任务仍需要在单独的线程中去执行。
BroadcastReceiver是一种消息型组件。用于在不同的组件乃至不同的应用之间传递消息。有两种注册方式,静态注册和动态注册,静态注册是在配置文件中注册,动态注册是在代码中注册。静态注册会在安装时就会被系统解析,因此不需要启动程序就可以收到相应的广播,而动态注册必须启动应用后才能收到广播。BR组件可以实现低耦合的观察者模式。BR它也不适合执行耗时的操作。
ContentProvider是一种数据共享型组件,用于想其他组件或者其他应用共享数据。

Activity工作过程(关键节点)

Activity的startActivity有好几种重载方法,但是最终都是调用startActivityForReuslt方法。在经过Instrumentation中的execStartActivity方法,发现Activity真正的实现是由ActivityManagerNative.getDefault()的startActivity完成。ActivityManagerService(AMS)继承自ActivityManagerNative(AMN),因此Activity的启动过程又转移到了AMS的startActivity中。在这个方法中,Activity的启动过程是这样:先转移到ActivityStackSupervisor中在相继执行下面的方法,见流程图

ActivityStackSupervisor.png

在ActivityStackSupervisor的realStartActivityLocked方法中有一段代码app.thread,这个类型是IApplicationThread,IApplicationThread继承自IInterface接口,它是一个Binder类型的接口。IApplicationThread的实现者是ActivityThread中的内部类ApplicationThread。在ApplicationThread中通过scheduleLaunchActivity来启动Activity。该方法发送一个H(Handler) ,在这个H中有对"LAUNCH_ACTIVITY"消息处理得知,Activity启动是ActivityThread的handleLanuchActivity来实现,再由performLaunchActivity完成了Activity对象的创建和启动过程。performLaunchActivity这个方法主要完成了如下几件事:
1.从ActivityClientRecord中获取待启动的Activity的组件信息
2.通过Instrumentation的newActivity方法使用类加载器 创建Activity对象
3.通过LoadedApk的makeApplication方法来尝试创建Application
4.创建ContextImpl对象通过Activity的attach方法来完成一些重要数据的初始化。
5.调用Activity的oCreate方法

Service的工作过程

Service的工作过程.png
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容