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