通过ART 提高Android App 性能

阅读5分钟,每日八点,和你一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、ART 提高 App 性能概览
二、ART 优化的配置方法
三、ART 改进和观察
四、ART 未来发展

一、ART 提高 App 性能概览

Android Pie中,我们在Play Cloud中 推出了ART优化配置文件,这是一项新的优化功能,可在新安装或更新后大大缩短应用程序启动时间。平均而言,我们观察到应用程序在各种设备上的启动速度提高了15%(冷启动)。一些英雄案例甚至显示30%+更快的启动时间。其中一个最重要的方面是用户可以免费获得此功能,无需他们的支持或开发人员的努力!

二、ART 优化的配置方法

该功能建立在先前的Profile Guided Optimization(PGO)工作的基础上,该工作是在Android 7.0 Nougat中引入的。PGO允许Android Runtime通过构建应用程序最重要的热门代码的配置文件并将其优化工作集中在其上来帮助提高应用程序的性能。这可以带来巨大的改进,同时减少完全编译的应用程序的传统内存和存储影响。但是,它依赖于设备在空闲维护模式下根据这些代码配置文件优化应用程序,这意味着它可能在用户看到好处之前几天 - 我们的目标是改进。


Play Cloud中的ART优化配置文件利用Android Play的强大功能,在安装/更新时带来所有PGO优势:大多数用户无需等待即可获得出色的性能!

这个想法依赖于两个关键的观察:

  1. 应用程序通常在众多用户和设备之间具有许多常用的代码路径(热代码),例如在启动或关键用户路径期间使用的类。这通常可以通过聚合几百个数据点来发现。
  2. 应用程序开发人员通常会逐步推出他们的应用程序,从alpha / beta渠道开始,然后扩展到更广泛的受众。即使没有alpha / beta设置,用户也常常会增加到新版本的应用。

这意味着我们可以使用应用程序的初始部署来为其余用户引导性能。ART分析应用程序代码的哪些部分值得在初始设备上进行优化,然后将数据上传到Play Cloud,后者将构建核心聚合代码配置文件(包含与所有设备相关的信息)。一旦有足够的信息,代码配置文件就会发布并与应用程序的APK一起安装。

在设备上,代码配置文件充当种子,在安装时实现有效的配置文件引导优化。这些优化有助于改善冷启动时间和稳定状态性能,所有这些都不需要app开发人员编写单行代码。

第1步:构建代码配置文件

其中一个主要目标是尽可能快地从聚合和匿名数据中构建高质量,稳定的代码配置文件(以最大限度地增加可以受益的用户数量),同时确保我们有足够的数据来准确优化应用程序的性能。采样过多的数据会在安装时占用更多带宽和时间。此外,我们构建代码配置文件的时间越长,获得好处的用户就越少。采样过少的数据,代码配置文件将没有足够的信息来确定适当优化的内容,以便产生影响。

聚合的结果就是我们所说的核心代码配置文件,它只包含有关每个设备随机会话样本中经常出现的代码的匿名数据。我们删除异常值以确保我们专注于对大多数用户而言重要的代码。

实验表明,可以在很短的时间内非常快速地计算出最常用的代码路径。这意味着我们能够以足够快的速度构建代码配置文件,以便大多数用户受益。

第2步:安装代码配置文件

Android 9.0 Pie中,我们引入了一种新类型的安装工件:dex元数据文件。与APK类似,dex元数据文件是常规存档,其中包含有关如何优化APK的数据 - 例如已在云中构建的核心代码配置文件。一个关键的区别是dex元数据仅由平台和应用商店管理,并且不会被开发人员直接看到。

还有对App Bundles / Google Play动态交付的内置支持:无需任何开发人员干预,所有应用程序的功能拆分都经过优化。

第3步:使用代码配置文件优化性能

要了解这些代码配置文件如何实现更好的性能,我们需要查看它们的结构。代码配置文件包含以下信息

  • 启动期间加载的类
  • 运行时认为值得优化的热方法
  • 代码的布局(例如,在启动或启动后执行的代码)

使用这些信息,我们使用了各种优化技术,其中以下三项提供了大部分优势:

  • 应用程序映像我们使用启动类来构建预先填充的堆,其中类已预先初始化(称为应用程序映像)。当应用程序启动时,我们将图像直接映射到内存中,以便所有启动类都可用。

    • 这样做的好处是应用程序的执行可以节省周期,因为它不需要再次执行工作,从而可以缩短启动时间。
  • 代码预编译:我们预编译所有热代码。当应用程序执行时,代码中最重要的部分已经过优化,可以本地执行。该应用程序不再需要等待JIT编译器启动。

  • 好处是代码被映射为干净的内存(与JIT脏内存相比),这提高了整体内存效率。内存压力下内核可以释放干净的内存,而脏内存则不能,减少内核杀死应用程序的可能性。

  • 更高效的dex布局:我们根据配置文件公开的方法信息重新组织dex字节码。dex字节码布局如下所示:[启动代码,发布启动代码,其余非配置代码]。

    • 这样做的好处是可以更高效地将dex字节代码加载到内存中:内存页面具有更好的占用率,并且由于所有内容都在一起,因此我们需要减少负载,并且我们可以减少I / O.

三、 ART 改进和观察

我们在去年年底向Playstore上的所有应用程序推出了云中的配置文件。

  • 超过30,000个应用程序已经显示出改进
  • 平均而言,冷启动在各种设备上的速度提高了15%
    • 许多顶级应用在所选设备上获得20%+(例如Youtube)甚至30%(例如Google搜索)。
  • 在Android Pie获取配置文件的应用程序安装量的90%以上
  • 额外优化的安装时间几乎没有增加
  • 适用于所有Pie设备。

一个非常有趣的观察是,平均而言,ART概述了大约20%的应用方法(如果我们计算代码的实际大小,则更少)。对于某些应用程序,配置文件仅占代码的2%,而对于某些应用程序,该数字则高达60%。

为什么这是一个重要的观察?这意味着运行时没有看到很多应用程序代码,因此不会投入代码的优化。虽然有许多有效的用例,其中代码将不会被执行(例如错误处理或向后兼容性代码),但这也可能是由于未使用的功能或不必要的代码。偏斜分布是一个强烈的信号,后者可以在进一步优化中发挥重要作用(例如,通过删除不需要的dex字节码来降低APK大小)。

四、ART 未来发展

我们对ART优化配置文件所展示的改进感到兴奋,并且我们将来会更多地发展这一概念。构建每个应用程序的代码配置文件为更多应用程序改进提供了机会。开发人员可以使用数据根据最终用户的相关性和重要性来改进应用。使用“个人档案”中收集的信息,可以重新组织或修剪代码,以提高效率。开发人员可以使用App Bundle根据其使用情况拆分其功能,并避免向用户发送不必要的代码。我们已经看到应用启动时间的巨大改进,并希望看到配置文件带来的额外好处,使开发人员的生活更轻松,同时为我们的用户提供更好的体验。
友情推荐:
Android 干货分享

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269