AMS之开机启动Launcher、开机广告后启动Launcher、Launcher启动activity

activity的启动关闭最终都是由AMS控制的。从刷了rom到第一开机引导、launcher启动、点击启动特定app,这之间ams控制开机引导activity、launcher、app启动有什么不同吗?还是same流程?下面让我们一探究竟。

文章分三部分:第一部总体概述、第二部分流程图、第三部分讲解下具体一些细节点。

一、总体概述:

无所做什么,一定先是了解概况,然后在看细节,不然就是只见树木不见森林。

这里就会有区分,开机广告/开机引导类似(电视现在都是先播放广告,然后启动launcher)、launcher、其他app;

本文也从这个角度进行一下分析。

简单的说,启动一个activity,先看是否已经有activity是resume状态,没有则直接启动;有则先pause掉当前resume的,然后启动想启动的;这里也不关注activity如何调用到AMS的,只关注AMS内部如何调度最终启动相关的activity的。

除了开机广告,launcher和app启动都是两个阶段:一pause当前resume的activity;二resume需要启动的activity。(先finish后pause)

牢记,就这两个阶段,不过launcher和app启动在这两个阶段有些许的区别而已。

开机广告就不多说了,后面也会给出AMS添加的方案,从AMS直接启动广告Activity播放广告,然后主动finish;系统会启动Launcher;点击相关app,启动自己想打开的应用(顺序三个阶段)

二、流程图

1.正常启动Launcher

这里先看下正常情况下的Luancher启动,即开机即启动Launcher。然后在看下先播放开机广告,然后在自动Launcher,看下异同点。


AMS被SystemServer启动之后,SystemServer会通过AMS调用startHomeActtivity启动Launcher,流程见上流程图。

其中有几个关键函数,需要关注一下:startHomeActivityLocked、startActivityLocked、addActivityToTop、resumeTopActivityLocked、realStartActivityLocked、attachApplicationLocked;几个点记住:ProcessLocked中有Process.start,最终会触发AMS的attachApplication。

从流程途中看到,起点可以算startHomeActivityLocked,终点是realStartActivityLocked

第一阶段是startHomeActivity,触发activity的进程创建;第二阶段就是AMS的attachApplication在进程创建后被调用,最终执行realStartActivityLocked会回调Activity的onCreate函数。

这里第一阶段和上面说的不太一样,不过没关系,下面看下先播开机广告在启动launcher的流程。

2.开机广告之后启动Launcher

AMS启动广告的就不看了,看下广告finish之后,Launcher启动的流程:

先看下调用栈:

第一阶段:开机广告finish掉,触发paused:
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值