一次非常有意思的启动优化经历:从4.024s 到 1.127s

鸿洋 2022-06-24 08:35

互联网领域里存在着一个定律,八秒定律,即指用户访问一个网站时,如果等待网页打开的时间超过8秒,会有超过70%的用户放弃等待,对Android APP而言,要求就更加严格了,如果打开页面系统无响应时间超过5秒,便会出现ANR,APP会被强制关闭。因此,启动性能是 APP 使用体验的门面,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减。

因此,性能优化不仅成为大厂永恒的敲门砖,更是工作中最能突显价值的金字招牌。近几年面试进一步向深、向广。你看似无理甚至无用的问题,但也是现在这个岗位对求职者必备的一些要求!

例如:关于启动优化的夺命连环call

启动优化白屏问题怎么产生的,白屏产生原理   

360加固下,壳dex如何设计才能加快启动速度

APP启动中,你是如何设置线程无环图的

第三方SDK的初始化实现懒加载时,如何避免使用时初始化造成的卡顿问题

启动优化中影响类加载速度有哪些

上面是一个典型的Android性能优化相关面试(大厂必问技能栈), 不知道大家发现上面的套路了吗?优秀的面试官,是顺着你的话往下走,看看你到底有几斤几两,俗称的剥洋葱。 你会什么,我问什么。这就要求我们对自己 “说的话,写的字”要负责。

在面试过程中,关于启动框架的问题,如果只是很表面地回答搞个线程池 + 一个有向无环图算法然后拆拆任务,就显然太过于普通,无法跟竞争者拉开差距。

其实大厂的精细化程度远超大家的想象,首先启动阶段尽可能最大化利用系统资源:

  1. 启动框架,设置多少个线程合适?

  2. 每个线程的优先级怎么设置,Android 中线程优先级范围是多少?

  3. CPU 有大小核,有没有可能把特定线程都扔到大核里面执行;

从这些方面往原理层面去回答,面试官会觉得你的“内功深厚”

而关于启动优化,首先肯定是要掌握APP的启动流程下面这张Android启动流程图,不少人都看过,但少有人沉下心去仔仔细细的研究过。

对于上图来说,需要理解大量framework源码,你能找到核心代码吗?你能找到合理的优化位置吗?图中相关framework源码解析文档给大家分享一份,如下图:

该图高清版扫码细节流程图添加可免费获取,添加后还赠送耳机一副

大多数开发者更多的还是在做业务开发,对于性能优化基本停留在"听说过"或者"简单使用工具"的阶段,其中不乏一些工作多年的 Android 工程师。

当然如果想要精进,不仅要知道如何利用工具做性能优化,还要对底层原理充分了解,对架构设计有一定经验,例如你从任务管理角度做启动优化,就需要精通图论与框架设计,同时还需要熟悉Framework层执行流程,如果你对IO进行优化,就必须精通MMAP原理与框架封装的常用技术等...

这样才算精通对某个领域的性能优化,精通意味着

  1. 在面试环节,性能就是最好的面试题,既能考察候选人的潜力,也能考察其工程能力;

  2. 在大厂晋升中,其他部门的高级专家在不熟悉候选人业务的情况下,只能去考察底层的硬核知识,而性能问题又是最有区分度的问题

当然,在一些面试中,也会看到一些朋友写“精通性能优化”,但是让其描述,往往就是一些自己编写的业务,一些去除页面多余嵌套、使用线程池、ViewStub 这些非常浅的方案。

我们更希望能听到,线上复杂环境,低端机/弱网等因素下,用户触发的一系列的体验问题。

想要搞清楚这些,那么必须对底层原理有着深度了解,对各种case非常丰富的经验;很多人经常遇到措手不及的问题,大多是对出现问题的情况和处理思路模糊不清,导致此原因就是因为没有搞懂底层原理。

如果你还没有掌握性能优化,现在想要在最短时间里吃透它,那么必须要跟着真正有实力的大佬学习!

这里特别邀请腾讯T12级专家 Jett 为大家带来《淘宝APP项目启动优化及启动框架设计实战直播分享,让你站在高工的角度,深度理解APP启动原理与启动框架设计,掌握大厂启动过程中各种优化手段

原价298元,现在限时免费加入学习(限量100个名额大家手速要快,赶紧识别下方图中二维码加入学习!

报名学习后还将附赠一套大厂优化实战笔记

上述全部内容随课程附赠添加后还赠送耳机一副

赶紧扫码报名获取资料,开启你的学习之旅

如遇扫码频繁+VX:maniuww

前 100 人有效,先到先得!

推荐阅读