android启动速度优化
A. Android 11 提高 App 冷启动速度 5% 以上
在Android 11中引入的IORap功能显着减少了应用的冷启动时间,平均提高了5%以上,部分设备甚至达到20%以上。这一改进无需开发者进行任何额外操作,即可享受到优化带来的便利。
IORap通过预取I/O操作来减少应用启动时间。许多应用在启动时耗时过长,主要是因为阻塞I/O导致I/O请求队列未饱和。预取数据后,同时压缩I/O操作,应用可以在kernel pagecache中快速访问预取数据,从而大幅缩短启动时间。
我们在Google Play Store上对热门应用进行了测试,发现80%的应用在启动过程中,因阻塞I/O耗时超过10%,80%的应用耗时超过20%。测试显示,IORap可以为大多数应用提供性能提升。
作为一个独立的服务,IORap通过IPC与package manager、activity manager、perfetto服务等交互。其架构图显示了与系统服务的交互关系。
IORap基于特定策略预测并预取I/O操作,通过perfetto进行跟踪记录。跟踪记录了kernel pagecache中的页面添加和删除情况。测试表明,跟踪记录所导致的开销可以忽略不计。
通过perfetto trace生成预取列表,包含启动期间需要读取的文件信息(名称、偏移、长度)。IORap分析mm_pagemap事件,并将结果(inode、偏移量、长度)转换为(名称、偏移量、长度),存储在预取列表中。列表以protobuf文件形式保存。
生成预取列表后,后续运行应用时,IORap为应用预取对应数据。在执行完预取操作后,无需继续使用perfetto trace,开发者无需任何操作。系统在用户点击图标或通过Intent请求时执行预取操作。
预取列表并非永久存在,会因某些事件导致过时并被删除。当应用更新时,更新过程中可能会改变预取数据,不建议在更新阶段预取数据。优化后的应用数据不会改变,这会使预取列表过时,从而开始新一轮的perfetto trace。
通过对比实验结果,可以确定IORap对于低端机和高端机都有显着收益,平均启动速度提升可达26%。对于在启动期间有大量I/O操作的应用,优化效果尤为明显,如Spotify在低端设备和高端设备上的优化效果分别达到两位数。
实验中发现,IORap性能受预取数据的影响,跟踪持续时间对IORap至关重要。过短的跟踪时间导致预取的数据量减少,性能较低;过长的预取可能导致需要预取的数据过多,可能减慢启动速度。使用ReportFullyDrawn事件的时间戳可以估计跟踪持续时间,正确调用reportFullyDrawn回调可以提升IORap性能。
未来,我们将专注于优化IORap,目标是进一步提高其性能。我们对IORap的性能表现感到兴奋,并计划在应用启动分析和解决潜在性能问题方面进行优化。
总结:调用reportFullyDrawn来帮助IORap优化应用启动过程,可以进一步减少I/O阻塞时间。对于应用启动性能的持续改进,考虑对应用启动过程进行深入分析和优化。
B. androidapp启动速度优化
优化Android App启动速度是提升用户体验的关键环节。在应用启动时,用户往往能明显感受到屏幕的白屏或黑屏,这直接影响了第一印象和整体体验。在启动过程中,系统首先检查进程是否存在,若不存在则进行冷启动。这一过程中,系统会处理服务,创建进程,最后执行启动Activity操作。用户在这一阶段通常看到的是白屏或黑屏,这是由于系统和应用的初始化过程所需的时间。
为解决此问题,一种策略是将自定义的`windowbackground`设置为默认显示的背景图片。然而,这会导致所有Activity启动时都先显示该背景,如果是透明背景,则可能会出现点击图标无反应的情况。为避免这一问题,可以创建一个专门的主题,仅在应用启动时使用,确保其他Activity的样式保持不变。
以QQ应用为例,其在Application阶段不初始化任何内容,将启动时间优化至极致。但大多数应用无需达到如此极致的速度,如腾讯系和阿里系应用,通常在启动时仅显示一张图片,随后展示约3秒的广告,利用这段时间进行初始化操作。
为了更深入地优化启动速度,可以使用Google提供的工具进行代码执行时间的分析。通过查看AM.java在系统源码中的路径,可以了解各个组件的启动时间。此外,Android开发中还有许多优化方向,如通过开启线程处理不涉及UI操作和异步要求不高的任务,以及采用懒加载策略,即在需要时才初始化如网络或数据库操作。
总的来说,优化Android App启动速度涉及多个层面,从解决白屏黑屏问题到进行更深层次的代码分析和优化策略实施。深入理解启动优化中的技术细节,结合实际应用需求,可以显着提升用户体验。更多关于Android优化的知识和技术,可以在《Android核心优化类目》中找到相关的记录和指导。