0

我当前的应用程序需要冷启动~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 之前,如何优化系统所需的时间呢? 谢谢!

4

1 回答 1

1

听起来像是systrace的一个很好的用例。我通常(至少)使用gfx, input, view, wm, am, res, dalvik, bionic, 和sched类别。A-b 10000确保足够的缓冲区大小不会受到伤害。

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

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

如果有一段看起来很有趣,但您不了解其确切含义,那么在https://cs.android.com/上搜索该文本会很有用。

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

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

于 2021-07-25T04:30:42.360 回答