Android8.0 开机速度优化:开篇

背景

主芯片是4核Cortex-A9处理器, 整体的硬件性能一般。

接手优化前,其他同事已经优化了2个月左右,裁剪了apk,优化了耗时资源、部分耗时动作等等。由于项目包含手机的大部分功能,且车机大屏,自带apk较多,导致优化后,关闭log的状态下,启动仍然需要很长时间。客户优化要求:必须有开机logo和开机动画(1080p),启动完成的标志是能够立刻操作界面。

目前经过优化,启动时间缩短一半,系统测试稳定。

正文

优化启动速度的思路

优化内容涉及:uboot 、kernel、ramdisk、framwork、app。

本篇的内容主要涉及的是优化启动的思路,作为开机速度优化的开篇吧。

关于android启动速度的优化,在我之前带的android项目里,其实不会花这么长时间来做,主要是因为之前选择的软硬件方案,在性能方面,比较符合当下产品的要求,因此在做了少量优化工作后,启动速度能够满足客户要求。 而这个的项目,我是在项目后期,过来解决启动速度慢的问题,整个项目的硬件性能跑android8.0有点吃力,在启动过程中,可以发现硬件资源时常达到瓶颈状态。

其实大部分优化开机速度的思路都很简单:找到哪里耗时,想办法缩短时间、延后执行,让界面尽快显示出来、必要功能优先加载、不必要功能延后加载。这个思路在类似Qt+linux的系统上比较好实施,但是在android系统上,需要考虑东西会多很多。由于android本身架构的影响,模块之间,或者每一层之间都有关联、互相影响。因此在优化开机速度遇到瓶颈的问题上,动嘴的比较多。要真的动手优化下来,还是要沉下心来,踏踏实实的分析代码、熟悉代码。

在这边优化启动速度,和我早期在上一家公司,实现安卓双屏异步显示时音频异步播放功能,情况有点类似,当时公司到处找方案公司实现音频异步的功能,得到的答复是比较难实现,需要有经验的团队花几个月才可能能够实现,公司内部也一直无法实现,导致这个功能,一直成为了这个项目的不确定性。进公司后,花了1个多月,将整个音频流程啃下来,熟悉了整个设计的框架和代码流程后,其实问题解决了一大半,再对Hal层的调用机制加于熟悉,驱动也是自己写的,功能也就顺理成章的实现了。

通常,由于网上关于android启动速度优化的文章很多,照着这些文章一个点一个点的去优化,其实也能够有一定的进展,同时你也不一定需要对android系统有很熟悉的程度。只是这种优化的缺陷是,当你的项目遇到的问题比较特殊,网上没有相关的指导文章时,你的优化程度很容易达到瓶颈。

tips1: 当启动速度遇到瓶颈,或许可以尝试分析下代码,看看里面有没有要的答案。
tips2: 硬件性能是否都挖掘出来了?

参照通常开机速度优化的思路,在android系统上,需要做的步骤大概是:

  1. 了解系统的组成和启动流程;
  2. 通过调试工具,找出各阶段的耗时情况,罗列出来。初步分析哪些阶段的耗时优化空间大、优化的难易程度;
  3. 开始着手优化;
    tips: 如果优化就你一个人做,建议从底层逐步开始优化,好处是,上层更多的是策略,会因为底层的变动而变化。
  4. 深入分析准备优化的部分,通过调试手段,得出该模块的内部耗时情况,根据需要裁剪和优化;观察启动时硬件资源的使用情况,分析优化空间;
  5. 优化过程中,分阶段的测试系统的功能和稳定性;

优化不是一蹴而就的,如果根据已知的方法进行了优化,仍然不能够满足要求,那么就好好的分析下代码在该项目中的启动过程,分析目前是哪些瓶颈导致,按照其他项目的优化方式,优化后,启动时间仍然不够理想呢,多问几个为什么,而不是停留在类似“启动服务很多导致启动慢”,应该类似"哪些服务耗时长,都在做什么动作?",“启动过程中所有大的耗时部分(秒级)我都了解了吗,是不有些部分的耗时,还不清楚是什么导致的呢?”。

此时优化的关键是,找出启动过程影响启动速度的瓶颈。通过一系列措施解决和处理瓶颈问题。
这也是本文编写目的,实施了几乎所有常规优化手段,仍然离客户要求或者其他项目的启动时间有很大的差距。目前启动时间缩短一半。但这并不是启动优化的终点,需要优化到什么程度,这是一个需要根据项目需求和项目资源来权衡的问题;还能优化到什么程度,目前判断还是有一些方向,可以做进一步的尝试,路漫漫,看后续情况吧。

发布了2 篇原创文章 · 获赞 0 · 访问量 111

猜你喜欢

转载自blog.csdn.net/fd_yangzhao/article/details/103930032