缩短启动延迟时间

启动延迟时间是一项重要指标,有助于保持日活跃用户数并确保用户在首次互动时就获得顺畅的用户体验。在可能考虑性能权衡的低 RAM 环境中,这一指标尤为重要。不过,在开始改进应用启动之前,请务必先了解对启动本身有影响的基础方面。

最佳实践

分发基准配置文件

基准配置文件可以略过所包含代码路径的解译和即时 (JIT) 编译步骤,从而使代码执行速度在首次启动时即可提高约 30%。通过在应用中分发基准配置文件,Android 运行时 (ART) 可通过预先 (AOT) 编译来优化包含的代码路径,从而针对每位新用户以及每项应用更新提升性能。

避免急于执行初始化

避免在应用的启动序列中执行不太必要的急切任务。应用启动一个进程时,最有可能的情景是通过启动应用来实现。不过,WorkManagerJobSchedulerBroadcastReceiver、绑定服务和 AndroidX 启动库也可以在后台启动应用进程。请尽可能避免在 Application 类中急于执行不必要的初始化任务。许多库都提供按需初始化,以便您仅在必要时调用它们。

将任务从界面线程移至后台线程

如果有耗时更长的任务阻塞主线程,请将其移至后台线程,或使用 WorkManager 来确保效率。找出占用大量时间或耗时比预期更长的操作。优化这些任务有助于大幅缩短启动延迟时间。

分析并解决严重的磁盘读取争用问题

StrictMode 是一种开发者工具,可帮助检测在接收界面操作或播放动画的应用主线程中意外使用磁盘或网络访问权限的情况。一旦该工具检测到可能需要改进的方面,就可以自动终止相应应用或记录违规行为,以便日后进行进一步检查。

避免同步 IPC

应用执行过程中的长时间停顿往往是由 binder 调用(Android 上的进程间通信 [IPC] 机制)引起的。在较新的 Android 版本中,这是导致界面线程停止运行的最常见原因之一。一般来说,解决方法是避免调用进行 binder 调用的函数;如果不可避免,则应该缓存相应值,或将工作转移到后台线程。如需了解详情,请参阅线程调度延迟