Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52721 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

07 | 启动优化(上):从启动过程看启动速度优化

系统调用优化
GC优化
线程优化
业务优化
业务梳理
闪屏优化
systrace
Simpleperf
Nanoscope
Traceview
优化方式
优化工具
问题3:首页显示后无法操作
问题2:首页显示太慢
问题1:点击图标很久都不响应
T4界面可操作
T3主页显示
T2闪屏显示
T1预览窗口显示
课后练习
总结
启动优化
启动问题分析
启动过程分析
启动优化

该思维导图由 AI 生成,仅供参考

在超市排队结账,扫码支付启动十几秒都还没完成,只能换一个工具支付?
想买本书充实一下,页面刷出来时候十几秒都不能操作,那就换一个应用购买?
用户如果想打开一个应用,就一定要经过“启动”这个步骤。启动时间的长短,不只是用户体验的问题,对于淘宝、京东这些应用来说,会直接影响留存和转化等核心数据。对研发人员来说,启动速度是我们的“门面”,它清清楚楚可以被所有人看到,我们都希望自己应用的启动速度可以秒杀所有竞争对手。
那启动过程究竟会出现哪些问题?我们应该怎么去优化和监控应用的启动速度呢?今天我们一起来看看这些问题该如何解决。

启动分析

在真正动手开始优化之前,我们应该先搞清楚从用户点击图标开始,整个启动过程经过哪几个关键阶段,又会给用户带来哪些体验问题。
1. 启动过程分析
我以微信为例,用户从桌面点击图标开始,会经过 4 个关键阶段。
T1 预览窗口显示。系统在拉起微信进程之前,会先根据微信的 Theme 属性创建预览窗口。当然如果我们禁用预览窗口或者将预览窗口指定为透明,用户在这段时间依然看到的是桌面。
T2 闪屏显示。在微信进程和闪屏窗口页面创建完毕,并且完成一系列 inflate view、onmeasure、onlayout 等准备工作后,用户终于可以看到熟悉的“小地球”。
T3 主页显示。在完成主窗口创建和页面显示的准备工作后,用户可以看到微信的主界面。
T4 界面可操作。在启动完成后,微信会有比较多的工作需要继续执行,例如聊天和朋友圈界面的预加载、小程序框架和进程的准备等。在这些工作完成后,用户才可以真正开始愉快地聊天。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了应用启动优化对用户体验和核心数据的重要性,并以微信为例,分析了启动过程的关键阶段和可能出现的问题。文章提出了优化和监控应用启动速度的方法,强调了从用户真实体验出发的重要性。具体包括优化工具的选择和使用,以及优化方式的细致分析,如闪屏优化、业务梳理、业务优化、线程优化、GC优化和系统调用优化。通过实例和技术细节的解释,为读者提供了全面的启动优化知识。文章内容丰富,涵盖了技术细节和实用方法,对于应用开发者和技术人员来说具有很高的参考价值。文章还提到了启动优化对性能优化工作的重要性,以及对业务的梳理和优化是最快出成果的。同时,课后练习部分提到了systrace + 函数插桩作为一个非常不错的卡顿排查工具,为读者提供了进一步学习的方向。整体而言,本文内容丰富,涵盖了启动优化的全面知识,对于技术人员来说具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(40)

  • 最新
  • 精选
  • 海贼凯
    闪屏页需要网络请求怎么进行优化?

    作者回复: 一般都是提前准备好闪屏页的,在下一次生效

    2019-10-12
    11
  • menty
    python systrace.py --list-cate... 请问这种命令在什么环境运行,试了在adb shell中运行不了

    作者回复: 这个是在pc的shell环境下执行的,不是在手机的shell里执行的,然后这个脚本的地址在AndroidSdk\platform-tools\systrace 下

    2019-03-14
    5
  • 黄秀明
    王老师,请问线程的优先级是否需要考虑?

    作者回复: 需要,特别是后台线程优先级过高,导致系统真繁忙时的主线程卡顿。可以去看每个线程的utime stime

    2019-02-26
    4
  • 66
    请问对于生成的trace文件,分析的重点应该是在哪几个指标?界面上指标参数有点多

    作者回复: 主要还是以主线程的耗时为主,看它会不会因为锁,空转,被抢占,或者本身慢,导致界面刷出来慢了

    2019-03-15
    2
  • 信仰年轻
    Unable to select a master clock domain because no path can be found from "SYSTRACE" to "LINUX_FTRACE_GLOBAL 老师,我查看生成的test.log.html报这个错误啊

    作者回复: 可以看看其他人的答案

    2019-01-20
    1
  • this is it
    请问Sample如何移植到自己的项目中去,我尝试移植一直不成功,还请能给出详细的移植操作步骤,感谢!

    作者回复: 主要看出现了什么问题

    2019-12-03
    2
  • hi 老师,代码如何计算启动耗时啊?ad shell am start -W 计算规则怎么看的?

    作者回复: 每个应用的启动结束点都不一样,基本不会是闪屏的时候。所以一般都是应用内部自己的启动统计框架

    2019-03-20
  • Egos
    张老师,你好!我们app 统计耗时和文章说的差不多,在主页onWindowFocusChanged 时计算最终时长。分析的时候发现在主页onResume 和onWindowFocusChanged 之间的时间差很大,看了源代码以后发现onResume 和onWindowFocusChanged 之间会执行ViewRootImpl#performMeasure,但是performMeasure 也远小于他们的时间差(大概小了1倍)。这种情况该怎么去分析呢,有办法dump 这段时间有什么耗时操作?

    作者回复: Systrace和traceview都可以把

    2019-03-18
  • 炸山哥
    张老师,请问project.getProperties().get("android").registerTransform跟示例的注册Transform方式哪一种更好点呢?我见上面也有人问了同样的问题。

    作者回复: 因为我们是想修改原来transform的逻辑,通过hook的方式可以控制的更好,而且关键还有时序的问题。

    2019-02-24
  • iniesta2014
    使用此插件集成到项目里面,然后打开生成的trace.html ,报了“Unable to select a master clock domain because no path can be found from "SYSTRACE" to "LINUX_FTRACE_GLOBAL". 关闭插件可以正常查看trace.html 。前面也有人遇到了

    作者回复: 是6.0以下的手机吗? 可以这样使用 cd &ANDROID_HOME/tools ./monitor 直接使用android monitor来进行systrace

    2019-01-02
收起评论
显示
设置
留言
40
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部