Android应用启动类型介绍

引言

在学习一个应用的主Activity启动的详细流程前,我们可以先了解Android应用的启动类型,对应用的启动有个初步认知。

从性能的角度,应用启动类型一般分为冷启动、热启动和温启动。应用冷启动的耗时较长,因此很多手机厂商为了提升应用启动速度,一般会做一些优化方案,比如应用预加载。

下面简要介绍下应用冷启动热启动

冷启动

冷启动的基本过程:

系统层:
1、加载并启动应用。
2、启动后加载启动动画(一般是桌面应用或者框架层来实现)。
3、创建应用进程。

应用进程:
1、应用进程被Zygote创建后,将会创建应用的对象。
2、启动主线程(一般指ActivityThread)。
3、创建并启动Main Activity。
4、创建窗口和视图。
5、绘制布局。
6、执行窗口绘制。

下面通过trace来看下某个应用的冷启动过程。
在这里插入图片描述

热启动

热启动比较简单,启动时系统直接把应用栈顶的Activity放到前台。如果应用的所有activity还存在内存中,那么就可以避免重复的对象初始化、渲染和绘制操作。但如果系统内存不足时,应用进程的对象被回收,那这时热启动需要重新实例化对象,此时跟冷启动将界面显示到手机屏幕一样。

下面通过trace来看下某个应用的热启动过程。
在这里插入图片描述
由于应用进程已经存在,所以从trace里面看到热启动并没有bindApp的动作。

如何看应用启动时间

方法一:通过am start命令查看
a

db shell am start -W com.android.settings/com.android.settings.Settings

输出:

Starting: Intent{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings}
Staus:ok
LaunchState:COLD
Activity:com.android.settings/.Settings
TotalTime:354
WaitTime:355
Complete

方法二:通过systrace判断启动时间:从点击事件到绘制第一帧doframe;

排查应用启动慢的系统因素

  1. 排查测试机器与对比机器的配置是否一致
  2. 排查测试机器与对比机器的测试环境是否一致(网络、电池大小等)
  3. 排查测试app的版本是否一致;
  4. 排查cpu提频是否一致;
  5. 排查IO读写速度与对比机是否有较大的差异;
  6. 排查GPU频率是否一致;
  7. 排查app启动动画的形式是否有差异(桌面做动画还是框架)
  8. 排查app启动时自身是否有做大量的JIT优化操作,如果有的话排除干扰,可以执行命令:adb shell cmd package compile -m everything -f PKG_name;
  9. 排查app启动GC是否严重;
    10.查看doframe的耗时(如果这个地方耗时,多数是app自身设计的问题)
    11.排查TP的响应时间是否有差异;

结语

了解应用的启动方式后,接下来基于应用的冷启动,在Framework专栏里面深入分析下某个应用在桌面点击图标后,应用进程的创建和第一个Activity的启动过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Quexl189

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

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

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

打赏作者

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

抵扣说明:

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

余额充值