Activity启动流程源码分析之入门(一)

##1、背景##

在Android系统中,大家都知道Activity和Service是应用程序的核心组件,我们平时在开发Android应用时无时无刻都在使用它们,确实作为Android应用的四大组件,它们的地位不言而喻。虽然平时它们已被我们使用的滚瓜烂熟,但是你知道它们的启动原理吗?到这里肯定有人会问,Activity不是七个生命周期的方法吗?然后是从onCreate方法开始执行的吗?

对,你说的都没错,之所以使用起来那么简单是因为Android已经将它们封装的很完美,只暴露几个特定的方法供开发者调用,但是这仅仅是从Android的应用层角度去看它们,那我们在深入一点,从Android的框架层去了解它们呢?

好啦,话不多说,开始进入我们今天的正题。

但在开始今天的讲解之前希望大家先了解一下ActivityManagerService的一些基本知识ActivityManagerService与应用程序通信分析

##2、Activity启动方式##

由于是在系统的框架层角度去剖析它们,所以篇幅也相对来说较大,所以这里我准备将Activity和Service单独阐述。首先我们来看看Activity,Activity的启动方式大家都知道吧(ps:不是我们平时所说的startActivity和startActivityForResult)?Activity一般有两种启动方式:
(1)用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity。
(2)Activity内部通过startActivity方法启动新的Activity。
鉴于这里有两种启动方式,所以我打算用三篇博客来详细的讲解它的启动方式:
(1)Activity启动流程源码分析之入门
(2)Activity启动流程源码分析之Launcher启动
(3)Activity启动流程源码分析之startActivity启动

今天我们就来先简单的谈谈Activity启动的大致流程,让大家有一个大概的了解,后面两篇文章将详细阐述。
平时大家在开发Android应用时Activity应该是用的最多的组件了吧?所以今天我们就不举示例了,直接来分析其启动流程。

##3、Activity启动流程##

其实无论是通过点击应用程序图标来启动Activity,还是通过Activity内部调用startActivity方法来启动新的Activity,都需要借助于应用程序框架层的ActivityManagerService服务进程,ActivityManagerService是一个非常重要的服务,它不但负责启动Activity和Service,还管理着它们。

接下来我们看下Android应用程序框架层中的ActivityManagerService启动Activity的大致流程。

Activity启动流程

我们简单的分析一下启动流程:

  1. 无论是通过Launcher来启动Activity,还是通过Activity内部调用startActivity方法来启动新的Activity,其最终都是通过Binder进程间通信进入到ActivityManagerService进程中,并且调用ActivityManagerService.startActivity方法。

  2. ActivityManagerService调用ActivityStackSupervisor.startActivityMayWait来做启动Activity的相关准备。

  3. ActivityStackSupervisor会调用ApplicationThread.schedulePauseActivity方法并最终调用ActivityManagerService.activityPaused方法来Pause当前的视图,对于通过点击应用程序图标来说,这个视图就是Launcher,而对于通过在Activity内部调用startActivity来说,这个视图就是当前的Activity。

  4. 对于通过点击应用程序图标来启动的Activity,ActivityManagerService在这里会调用startProcessLocked来创建一个新的进程,而对于通过在Activity内部调用startActivity来启动新的Activity来说,这一步是不需要执行的,因为新的Activity就在原来的Activity所在的进程中被启动的。

  5. ActivityManagerServic调用ApplicationThread.scheduleLaunchActivity方法,准备启动Activity的相关操作。

  6. ApplicationThread会调用ActivityThread.handleLaunchActivity并最终调用ActivityThread.performLaunchActivity方法通过ClassLoader导入相应的Activity类,然后把它启动起来。

好啦,到此整个Activity的启动流程我们就简单的介绍到这里,接下来我们将对它的两种启动方式进行详细的分析。

1、Activity启动流程源码分析之Launcher启动(二)

2、Activity启动流程源码分析之startActivity启动(三)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪舞飞影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值