Android 应用冷启动:如何将时间优化到 Application.onCreate?

Android cold app start: How to optimise time to Application.onCreate?

我当前的应用需要冷启动~8 seconds,我想对其进行优化。
出于这个原因,我在 Application onCreate 中添加了一个日志条目(Application,而不是 Activity)

override fun onCreate() {
        Log.d("myTag", "Calling Application onCreate()")
        ....
}

在查看日志和测量时间时,我发现上面提到的 8 秒包括以下内容:
Tapping app icon => Application.onCreate = 4 秒
Application.onCreate => my Activity visible = 4 秒

我知道我可以优化从 Application.onCreate() 开始的时间。这是我的代码,我可以加快这部分的速度。
但是如何优化系统在 Application.onCreate 被调用之前所需的时间? 谢谢!

听起来像是 systrace 的一个很好的用例。我通常(至少)使用 gfxinputviewwmamresdalvikbionicsched 类别。 -b 10000 以确保足够的缓冲区大小不会造成伤害。

您将获得一个 html 文件,可以在浏览器中加载,或通过 Chrome/Chromium 的内置 chrome://tracing 页面打开。

在顶部,您会看到 CPU 详细信息,例如使用率百分比以及 运行 在哪个线程。然后,您将看到设备上的所有进程,其中包含嵌套的彩色块(“段”)以及有关当前正在发生的事情的信息。在每个线程的顶部,有一个小的彩色条:白色是“睡眠”(这包括等待互斥),蓝色是“等待 CPU”,绿色是“运行 on CPU".

如果有一段看起来很有趣但您不理解它的确切含义,搜索 https://cs.android.com/ 中的文本可能会有用。

无论如何,我的猜测是您有一些库链接或 ContentProvider 在 Application.onCreate 之前需要时间。这两者在系统跟踪中都是可见的。如果我的猜测是错误的,您可能会发现其他东西。祝你好运! :)

(也可能是 class 初始化...听听您的发现会很有趣!)