问题描述
我当前的应用需要冷启动 ~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 的一个很好的用例。我通常使用(至少)gfx
、input
、view
、wm
、am
、res
、dalvik
、 bionic
和 sched
类别。一个 -b 10000
以确保足够的缓冲区大小不会受到影响。
您将获得一个 html 文件,该文件可以在浏览器中加载,或通过 Chrome/Chromium 的内置 chrome://tracing 页面打开。
在顶部,您会看到 CPU 详细信息,例如使用率以及哪个线程在哪个时间运行。然后,您将看到设备上的所有进程,其中包含嵌套的彩色块(“段”)以及有关当前正在发生的事情的信息。在每个线程的顶部,有一个小的彩色条:白色是“睡眠”(包括等待互斥锁),蓝色是“等待 CPU”,绿色是“在 CPU 上运行”。
如果有一个片段看起来很有趣,但您不明白其确切含义,搜索 https://cs.android.com/ 处的文本会很有用。
无论如何,我的猜测是您在 Application.onCreate
之前有一些需要时间的库链接或 ContentProvider。这两个都可以在 systrace 中看到。如果我的猜测是错误的,您可能会发现其他东西。祝你好运! :)
(也可能是类初始化...听到你的发现会很有趣!)