启动延迟是衡量保留日活跃用户和确保首次互动流畅用户体验的一项重要指标。在 RAM 较低的环境中尤其如此,因为在这些环境中可能需要权衡性能。不过,在开始改进应用启动之前,了解影响启动本身的底层因素非常重要。
最佳实践
随应用附带基线配置文件
基线配置文件可避免对包含的代码路径执行解释和即时 (JIT) 编译步骤,从而将代码执行速度提升约 30%。通过在应用中附带基线配置文件,Android Runtime (ART) 可以通过预先 (AOT) 编译优化包含的代码路径,为每个新用户和每次应用更新提供性能提升。
避免预先初始化
避免在应用的启动序列中执行可能不必要的预先工作。您的应用启动进程最有可能的情况是通过启动应用来实现的。但是,WorkManager、JobScheduler、BroadcastReceiver、绑定服务和 AndroidX 启动库也可以在后台启动应用进程。如果可能,请避免在 Application
类中不必要地预先初始化任何内容。许多库都提供了按需初始化功能,让您只在必要时才调用它们。
将任务从 UI 线程移至后台线程
如果有耗时较长且阻塞主线程的任务,请将其移至后台线程或使用 WorkManager 以确保效率。确定占用大量时间或耗时超出预期的操作。优化这些任务可以显著提高启动延迟。
分析并解决严重的磁盘读取争用问题
StrictMode 是一种开发者工具,可以帮助检测应用主线程中意外的磁盘或网络访问,主线程是接收 UI 操作和执行动画的地方。一旦该工具检测到可能需要改进的地方,您可以自动终止应用或记录违规行为以便稍后进一步检查。
避免同步 IPC
应用执行中的长时间停顿通常是由 Binder 调用引起的,Binder 调用是 Android 上的进程间通信 (IPC) 机制。在最新版本的 Android 上,这是导致 UI 线程停止运行的最常见原因之一。通常,解决方法是避免调用进行 Binder 调用的函数;如果无法避免,则应缓存该值,或将工作移至后台线程。如需了解更多信息,请参阅线程调度延迟。