【问题标题】:Why do some android apps start so quickly?为什么有些安卓应用启动这么快?
【发布时间】:2021-09-28 06:25:57
【问题描述】:

我最近查看了 logcat 并注意到我的应用程序比其他应用程序需要更多的时间来启动。然后我创建了一个带有空活动的新项目,但它仍然比其他一些应用程序慢。

2021-07-20 21:28:17.750 1321-1344/? I/ActivityTaskManager: Displayed com.tutaf.myapplication/.MainActivity: +956ms

比较:

  • Telegram X 在 400-500 毫秒内开始
  • Firefox:550-1000 毫秒
  • VLC:700-900 毫秒
  • 4PDA:400-600 毫秒
  • 总指挥官:600-800 毫秒

为什么这些应用比空应用启动更快?有没有办法更接近它们的结果?

【问题讨论】:

  • 你是如何测试空应用程序的?你创建了apk吗?还是在 IDE 中启动应用程序?
  • 您在开始测试之前是否清除了所有缓存?
  • @AFarmanbar 我尝试创建一个 apk,现在应用程序在 850-900 毫秒内启动
  • @tutaf 我们需要有关其他应用程序的更多详细信息。所有应用程序和您的应用程序的 logcat。
  • @tutaf 速度更快的原因有很多。

标签: android performance optimization startup


【解决方案1】:

在对logcat进行调查后,我发现在应用程序的Make-Span(启动显示)期间。它受到几个Time Consuming Operations 的影响。此外,如果您减轻这些繁重的操作,您将能够加快应用程序的启动速度。在下面,我已经澄清了这个问题:

2021-07-20 22:43:50.730 => ok
2021-07-20 22:43:50.730 => ok
2021-07-20 22:43:50.748 => ok
2021-07-20 22:43:50.749 => ok
2021-07-20 22:43:50.750 => ok
2021-07-20 22:43:50.792 => spike : 42ms 
2021-07-20 22:43:50.793 => ok
2021-07-20 22:43:50.820 => ok
2021-07-20 22:43:50.822 => ok
2021-07-20 22:43:50.843 => ok
2021-07-20 22:43:50.884 => spike : 41ms
2021-07-20 22:43:50.895 => ok
2021-07-20 22:43:51.170 => spike : 275ms : INTENSE
2021-07-20 22:43:51.171 => ok
2021-07-20 22:43:51.173 => ok
2021-07-20 22:43:51.188 => ok
2021-07-20 22:43:51.189 => ok
2021-07-20 22:43:51.340 => spike : 151ms : INTENSE
2021-07-20 22:43:51.341 => ok
2021-07-20 22:43:51.481 => spike : 140ms : INTENSE
2021-07-20 22:43:51.481 => ok
2021-07-20 22:43:51.494 => ok
2021-07-20 22:43:51.550 => spike : 56ms 
2021-07-20 22:43:51.551 => ok
2021-07-20 22:43:51.676 /.MainActivity: +943ms

因此,如果您缓解 INTENSE 峰值 (275ms +151ms + 140ms = 566ms),应用程序的启动需要 377ms (943ms - 566ms),这是您预期的启动时间。

建议

  • 不要把主要活动搞得太胖
  • 做大部分操作async
  • 不要对 Main Activity 进行Data-Intense 操作
  • 不要在 Main Activity 的 UI 中放置过多的图形元素
  • 让您的主要活动尽可能轻量级

【讨论】:

  • 但这是我选择“空活动”模板时Android工作室自动生成的应用程序。所以,它并不胖,没有我可以异步执行的操作。 activity_main.xml 在 ConstraintLayout 中仅包含一个 TextViw,而 MainActivity.kt 仅在 onCreate 中调用 setContentView。我怎样才能使它更轻量级?
  • 问题是我构建了一个调试apk,但没有发布一个。现在应用程序在 450-500 毫秒内启动。感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2011-09-29
  • 2016-02-26
相关资源
最近更新 更多