Android——简单易懂说原理之Android四大组件工作过程(热修复、插件化基础2)

本文深入探讨Android四大组件——Activity、Service、BroadcastReceiver和ContentProvider的启动过程。从根Activity的启动开始,涵盖Service的启动与绑定,广播的动态注册、发送及接收,以及Content Provider的启动,为理解热修复和插件化打下基础。
摘要由CSDN通过智能技术生成

写在前面:这是“简单易懂说原理(热修复、插件化基础)”系列的第二篇文章,也是理解插件化原理的必备基础。阅读本文前须有Android系统启动流程及应用程序进程启动过程相关基础。


在前一篇文章中我们说到应用程序进程在创建的同时也创建了Binder线程池和消息循环。其实,在创建了Binder线程池后,应用程序进程还会创建并运行一个代表主线程的 ActivityThread,他管理着当前应用程序进程的主线程。

在本文中,我们将会经常提到ActivityThread。

一、根Activity的启动过程

根Activity是应用程序启动的第一个Activity,因此根Activity的启动过程在一般情况下我们也可以理解为是应用程序启动的过程。

根Activity的启动过程如下图所示。
在这里插入图片描述

其中,ApplicationThread是ActivityThread的内部类,是一个Binder。

  1. Launcher请求AMS。当我们点击图标时,就会通过Launcher请求AMS来启动该应用程序。其中这里会传递Intent.FLAG_ACTIVITY_NEW_TASK,使根Activity在新的任务栈中启动。
  2. AMS请求ApplicationThread。这部分有些复杂,涉及到两个流程(创建应用程序进程流程和启动根Activity流程),其中创建应用程序进程流程在这里就不赘述了,我们只来讲启动根Activity流程,也就是AMS到ApplicationThread的调用流程。如下图所示:在这里插入图片描述
    可以看到,AMS到ApplicationThread这一段的入口方法是startActivity()。
  • ActivityRecord:用于描述一个Activity,用来记录一个Activity的所有信息。在这里我们在获取完Launcher进程的pid和uid后,创建了一个ActivityRecord,用于描述将要启动的Activity。
  • TaskRecord:用来描述一个Activity任务栈,在这里其实我们也就是创建了一个新的Activity任务栈。需要注意的是,Activity任务栈是一个假象的模型,并不真实存在。
    在创建新的TaskRecord后,去获取要启动的Activity所在的栈的栈顶不是处于停止状态的ActivityRecord,对于要启动的Activity由于是个根Activity,所以ActivityRecord为空。
    接下来就是启动栈顶Activity。首先是获取这个即将启动的Activity所在的应用程序进程,之后就是在目标应用程序进程中启动Activity。
    上面的这些逻辑都运行在AMS所在的进程中,但是我们在获取即将启动的Activity所在的应用程序进程后,会得到这个应用程序进程的ApplicationThread。我们知道ApplicationThread是一个Binder,因此,逻辑自然由AMS所在进程经过Binder通信来到了ActivityThread,也就是进入到了应用程序进程中。
  1. ActivityThread启动根Activity。在得到应用程序进程的ApplicationThread后,ApplicationThread会将启动Activity的参数封装成ActivityClientRecord,并向H类发送类型为LAUNCH_ACTIVITY的消息,且在发消息时将ActivityClientRecord传递过去。
    这里H
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值