在Android Pie
中,咱们android
15%(冷启动)
。一些英雄案例甚至显示
30%+
更快的启动时间。其中一个最重要的方面是用户能够免费得到此功能,无需他们的支持或开发人员的努力!
该功能创建在先前的Profile Guided Optimization(PGO)工做的基础上,该工做是在Android 7.0 Nougat中引入的。PGO容许Android Runtime经过构建应用程序最重要的热门代码的配置文件并将其优化工做集中在其上来帮助提升应用程序的性能。这能够带来巨大的改进,同时减小彻底编译的应用程序的传统内存和存储影响。可是,它依赖于设备在空闲维护模式下根据这些代码配置文件优化应用程序,这意味着它可能在用户看到好处以前几天 - 咱们的目标是改进。性能优化
这个想法依赖于两个关键的观察:架构
这意味着咱们可使用应用程序的初始部署来为其他用户引导性能。ART分析应用程序代码的哪些部分值得在初始设备上进行优化,而后将数据上传到Play Cloud,后者将构建核心聚合代码配置文件(包含与全部设备相关的信息)。一旦有足够的信息,代码配置文件就会发布并与应用程序的APK一块儿安装。app
在设备上,代码配置文件充当种子,在安装时实现有效的配置文件引导优化。这些优化有助于改善冷启动时间和稳定状态性能,全部这些都不须要app开发人员编写单行代码。ide
其中一个主要目标是尽量快地从聚合和匿名数据中构建高质量,稳定的代码配置文件(以最大限度地增长能够受益的用户数量),同时确保咱们有足够的数据来准确优化应用程序的性能。采样过多的数据会在安装时占用更多带宽和时间。此外,咱们构建代码配置文件的时间越长,得到好处的用户就越少。采样过少的数据,代码配置文件将没有足够的信息来肯定适当优化的内容,以便产生影响。布局
聚合的结果就是咱们所说的核心代码配置文件,它只包含有关每一个设备随机会话样本中常常出现的代码的匿名数据。咱们删除异常值以确保咱们专一于对大多数用户而言重要的代码。性能
实验代表,能够在很短的时间内很是快速地计算出最经常使用的代码路径。这意味着咱们可以以足够快的速度构建代码配置文件,以便大多数用户受益。学习
在Android 9.0 Pie
中,咱们引入了一种新类型的安装工件:dex元数据文件。与APK相似,dex
元数据文件是常规存档,其中包含有关如何优化APK
的数据 - 例如已在云中构建的核心代码配置文件。一个关键的区别是dex
元数据仅由平台和应用商店管理,而且不会被开发人员直接看到。优化
还有对App Bundles / Google Play动态交付的内置支持:无需任何开发人员干预,全部应用程序的功能拆分都通过优化。ui
要了解这些代码配置文件如何实现更好的性能,咱们须要查看它们的结构。代码配置文件包含如下信息
使用这些信息,咱们使用了各类优化技术,其中如下三项提供了大部分优点:
好处是代码被映射为干净的内存(与JIT脏内存相比),这提升了总体内存效率。内存压力下内核能够释放干净的内存,而脏内存则不能,减小内核杀死应用程序的可能性。
咱们在去年年末向Playstore上的全部应用程序推出了云中的配置文件。
一个很是有趣的观察是,平均而言,ART概述了大约20%的应用方法(若是咱们计算代码的实际大小,则更少)。对于某些应用程序,配置文件仅占代码的2%,而对于某些应用程序,该数字则高达60%。
为何这是一个重要的观察?这意味着运行时没有看到不少应用程序代码,所以不会投入代码的优化。虽然有许多有效的用例,其中代码将不会被执行(例如错误处理或向后兼容性代码),但这也多是因为未使用的功能或没必要要的代码。偏斜分布是一个强烈的信号,后者能够在进一步优化中发挥重要做用(例如,经过删除不须要的dex字节码来下降APK大小)。
咱们对ART优化配置文件所展现的改进感到兴奋,而且咱们未来会更多地发展这一律念。构建每一个应用程序的代码配置文件为更多应用程序改进提供了机会。开发人员可使用数据根据最终用户的相关性和重要性来改进应用。使用“我的档案”中收集的信息,能够从新组织或修剪代码,以提升效率。开发人员可使用App Bundle根据其使用状况拆分其功能,并避免向用户发送没必要要的代码。咱们已经看到应用启动时间的巨大改进,并但愿看到配置文件带来的额外好处,使开发人员的生活更轻松,同时为咱们的用户提供更好的体验。