Android四大组件的工作过程

半城伤御伤魂 提交于 2020-02-04 14:20:53

概述

这里只分析一般过程,不涉及具体的源码分析。

Activity的启动过程

网图侵删

  • 很明显,Activity的启动过程涉及到了IPC,其实四大组件的启动过程都和IPC有关。
  • ActivityManagerService、ApplicationThread都是Binder,ApplicationTread完成了大量的Activity和Service的启动/停止相关的功能。
  • Handler H对消息的处理会调用handleLaunchActivity()->performLaunchActivity()得以最终完成Activity的创建和启动。

Service

Service的启动过程

网图侵删

Service绑定过程

在这里插入图片描述

  • ContextImpl是Context的具体实现,通过Activity.attach()和Activity建立关联,是典型的桥接模式。
  • ServiceRecord贯穿整个Service的启动过程。
  • 与Activity的启动过程类似,与AMS发生了IPC,最后回到ApplicationThread中,通过发送消息给H来完成最终的启动。

ContentProvider

ContentProvider的启动过程

在这里插入图片描述

ContentProvider的query过程

在这里插入图片描述

  • 当ContentProvider所在的进程启动时,ContentProvider会同时启动并发布到AMS中。这时ContentProvider的onCreate要先于Application的onCreate而执行。
  • 一般ContentProvider都是单实例的,这时由android:multipleprocess属性决定的,默认为false
  • 访问ContentProvider需要ContentResolver,其真正实现类是ApplicationContentResolver。当ContentProvider所在进程未启动时,第一次访问它会触发ContentProvider的创建以及进程启动。

BroadcastReceiver

广播注册过程

在这里插入图片描述

广播接收/发送过程

在这里插入图片描述

  • 静态注册和其他三大组件的注册在应用安装时由系统自动完成,具体来说是由PMS(PackageManagerService)来完成的。
  • 动态注册广播最终会跨进程交给AMS,并把远程Receiver( 实际上传的是IIntentReceiver,是个Binder )对象和远程IntentFilter保存起来,完成注册任务。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!