0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分析Android开机启动速度优化(含应用程序优化)

如意 来源:CSDN 作者:Peter盼 2020-06-20 10:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

众所周知Android开机启动速度较慢,于是如何加快启动速度便成为一个值得讨论的问题。

在查阅过许多资料后(特别是Google Group的android-platform),我整理总结出下面几点基本看法。

Android开机启动耗时较多的部分有2个,分别是preload classes和scan packages。

这里又数preload classes最为耗时,在我的机子上一般需要13秒左右。实际上,在看过google group众多关于preload class的主题后,基本可以确定以下事实:

preloaded-classes list中预加载的类位于dalvik zygote进程的heap中。在zygote衍生一个新的dalvik进程后,新进程只需加载heap中没有预加载的类(这些后加载进来的类成为该进程所private独有的),这样便加快了应用程序的启动速度。实际上这是一种以空间换时间的办法,因为几乎没有一个应用程序能够使用到所有的预加载类,必定有很多类对于该应用程序来说是冗余的。但是也正如Google所说,智能手机开机远没有启动应用程序频繁——用户开机一次,但直到下次再开机之前可能要运行多个应用程序。因此牺牲一点启动时间来换取应用程序加载时的较快速度是合算的。

preloaded-classes list已经是Google Android工程师使用众多测试工具分析,加以手动微调后形成的最优化预加载列表,涵盖了智能机上最长见的应用类型所需要的各种类。很难想象我们自己能够有什么手段能够获得比这样更优的一个预加载列表。所以,除非你的Android系统是被移植到非智能手机设备上使用(例如MID、EBOOK,可以不需要Telephony相关的类),不建议去“优化”preloaded-classes list。

在zygote中单起一个线程来做preload,是否可行?答案是否定的。首先在zygote中不可以新开线程,其次,就算新开一个线程,在目前智能机硬件条件下(单核CPU),除非有频繁大量的存储IO,否则我们不能看到我们期望加速启动效果。

关于scan packages的问题。同样参考上面提到的那篇帖子,我们从中可以知道一个事实:越少的apk安装,越短的启动时间。事实上确实如此,apk安装的多少的确影响开机速度,但相比而言,scan packages所花费的时间远没有preload classe多。似乎这里没有多少油水可榨,但起码我们知道了:尽量减少产品中预置的apk数量可以提升启动速度(哪怕精简到极致也许只节省了2s)。

最后,关于那篇帖子中提到的start services阶段,我认为虽然此阶段确实需要消耗可观的时间,但是正如文中提到的那样,优化这些services其实就是剔除我们不需要的一些services,而且不仅仅是修改SystemServer.java的问题,任何使用到被优化剔除掉的服务的代码都必须加以修改,否则系统肯定是起不来的。这样工作量大,而且难度也不小,并且有一定风险。因此对这些services的优化要慎之又慎。

那么加快启动速度是不是就没有办法了呢?也不是。除了硬件上的改动,在软件上使用BLCR技术也可以解决这个问题。

在此我认为同时有必要提一下应用程序启动速度加速的问题。用过Android的都会发现,第一次启动某个应用程序时比较慢,但只要不关机重启,大部分情况下以后再次启动就明显的要快许多。因此我们很容易想到一种办法,即“预加载”我们的应用程序一次,那么下次用户再次启动我们时不就快了吗?

我们首先明确一点:任何“预加载”的想法都是不切实际的。先不讨论实施在技术上的可能性,我们只要看一下Android的Activity生命周期管理就应该明白,就算你通过某种方式“预加载”了你的某个Activity,你也不能确保在用户真正要求开始运行它的时候,你所“预加载”的Activity还存在,因为Android很可能在你为“预加载”第一次启动Activity后的不久就将它gc掉了。依靠一个不可靠的技术,显然是不明智的。

那么还有没有别的办法呢?答案是有的,但是只在少数情况下才有一定意义。在源码的frameworks/base/core/res/res/values/arrays.xml中,我们可以看到有名为“preloaded_drawables”的项,其中列出的是Android在启动时预加载的图形资源,这样在某个应用程序需要这些图形资源时就不必再加载了。如果我们某个应用程序包含大量的图形资源,那么我们可以将其加入到这个preloaded_drawables项中以加快我们应用程序的启动速度。但是这样有一个显而易见的弊端:同preload classes一样,不是每个应用程序都需要所有预加载的图形资源,这些冗余的资源反而占据了应用程序进程的内存空间。因此,这种技术实际应用的局限性较大,仅限于这样一种情况:某个设备只运行固定的几个应用程序,而且这些应用程序包含大量的图形资源需要加载。但这样会是一个什么设备呢?

好了,到此基本上把我这两天研究的心得写出来了。限于认识水平有限,如果文中有误或者哪位能有更好的想法,欢迎在下面留言:)如果以后我又有心得,会再更新此文。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3986

    浏览量

    133082
  • 启动速度
    +关注

    关注

    0

    文章

    2

    浏览量

    6657
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问Keil的优化等级到底该如何选择?

    在Keil MDK(Microcontroller Development Kit)中,优化等级是编译器的核心设置之一,它直接影响生成代码的大小、执行速度和调试便利性。选择合适的优化等级是平衡性
    发表于 11-20 07:51

    程序运行速度很慢如何优化

    ;gt;外设,内存<->内存)交给DMA,释放CPU资源。 优化算法: 选择时间复杂度更低的算法。避免不必要的循环和重复计算。 减少函数调用开销: 对于频繁调用的小函数
    发表于 11-17 06:12

    蜂鸟E203内核优化方法

    提高程序的响应速度和并行度。 应用程序优化:针对具体的应用场景,优化算法和程序实现,减少资源占用
    发表于 10-21 07:55

    ElfBoard技术贴|【RK3588】ELF 2开发板开机启动详解

    在嵌入式系统开发中,合理管理开机启动项目能够优化系统启动流程,确保关键服务和应用按时加载运行。本文将详细介绍在ELF2开发板Linux5.10.209系统下基于SystemVinit
    的头像 发表于 06-27 16:20 1796次阅读
    ElfBoard技术贴|【RK3588】ELF 2开发板<b class='flag-5'>开机</b>自<b class='flag-5'>启动</b>详解

    鸿蒙5开发宝藏案例分享---冷启动优化案例分享

    鸿蒙冷启动优化大揭秘!这些官方宝藏案例让我效率翻倍 ? 大家好呀!最近在优化鸿蒙应用时,我偶然发现了官方文档里隐藏的性能优化宝藏案例。这些实战经验让我的应用
    发表于 06-12 17:22

    VirtualLab:光栅的优化分析

    光栅是光学工程师使用的最基本的工具。为了设计和分析这类组件,快速物理光学建模和设计软件VirtualLab Fusion为用户提供了许多有用的工具。其中包括参数优化,以轻松优化系统,以及参数运行,它
    发表于 05-23 08:49

    VirtualLab 应用:倾斜光栅的参数优化及公差分析

    允许为目标值定义参数约束和权重值。更多信息请参见: 参数优化文档的介绍 第一级次的参数优化 **结果——公差分析 **
    发表于 05-22 08:52

    HarmonyOS优化应用内存占用问题性能优化

    应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。 HarmonyOS提供了一些内存管理的工具和接口,帮助开发者有效地管理内存资源: onMemoryLevel接口
    发表于 05-21 11:27

    HarmonyOS优化应用包体积大小问题性能优化

    大小之前,需要先了解HarmonyOS应用的应用程序包结构。在进行应用程序包大小优化分析时,可以使用扫描工具扫描分析App包,根据输出的检测报告,采取相应措施
    发表于 05-20 14:50

    系统启动时间优化方案--基于米尔MYD-YG2LX开发板

    的整体表现。然而,如果驱动程序的行为不良,例如出现崩溃、卡顿或冲突等问题,那么进行优化就会变得更加棘手和挑战。这需要深入分析和修复驱动程序的问题,调整其代码和算法,以使其更加高效和可靠
    发表于 05-09 18:03

    基于RV1126开发板设置应用开机启动

    用户根据对自身项目程序的管理需求,进行自带或者自定义应用开机启动的创建与编辑。
    的头像 发表于 04-17 13:49 910次阅读
    基于RV1126开发板设置应用<b class='flag-5'>开机</b>自<b class='flag-5'>启动</b>

    VirtualLab Fusion应用:参数优化文档介绍

    局部优化算法和一种全局优化算法。 参数优化文档 可以为光学装置生成参数优化文档,该光学装置通过探测器或分析仪输出要
    发表于 02-28 08:44

    VirtualLab Fusion应用:光栅的鲁棒性分析优化

    制造过程产生的与设计参数的小偏差。请查看下面的文档,找到我们根据其填充因子优化倾斜光栅的示例。我们使用新发布的Parameter Variation Analyzer来执行设置的容差分析,并计算一个评价
    发表于 02-19 08:54

    FRED应用:LED发光颜色优化

    ” 色度值优化函数定义 X和y色度坐标优化函数需要彩色图像计算他们的值。输入变量g_ana 是分析面“屏幕”的节点数。这里,只有中心像素点的值用于决定X和y的色度值,只在光束重叠区域产生
    发表于 01-17 09:39

    FRED应用:LED发光颜色优化

    ” 色度值优化函数定义 X和y色度坐标优化函数需要彩色图像计算他们的值。输入变量g_ana 是分析面“屏幕”的节点数。这里,只有中心像素点的值用于决定X和y的色度值,只在光束重叠区域产生
    发表于 01-07 08:51