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

问题描述

我当前的应用需要冷启动 ~8 seconds,我想对其进行优化。
出于这个原因,我在我的应用程序 onCreate(应用程序,而不是活动)

添加一个日志条目
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”,绿色是“在 CPU 上运行”。

如果有一个片段看起来很有趣,但您不明白其确切含义,搜索 https://cs.android.com/ 处的文本会很有用。

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

(也可能是类初始化...听到你的发现会很有趣!)