【发布时间】:2016-04-21 22:34:41
【问题描述】:
我的旧 holo 应用过去启动速度非常快。
最近,我花了 1 年的时间兼职,将 holo 应用移植到 Material Design 应用。这是我所做的一些重大更改。
- 从 API 21 到 API 23
- 从
ActionBarSherlock到AppCompat工具栏支持库 - 从支持库 v4:22.1.1 到 v4:23.2.1
- 最终编译的 APK 大小从 4~5 MB 更改为 5~6 MB。
我现在面临的一个问题是我的材料设计应用程序的启动速度很慢。它比我的全息设计应用程序慢得多(超过 2 秒)。
holo 应用启动速度快
材料设计的应用程序启动速度慢
注意,在启动应用程序之前,我已经确保我提前终止了进程(通过设置 -> 应用程序 -> 强制停止)。
正如您在视频中看到的那样,一旦我点击图标,holo 应用程序的ActionBar 就会立即显示出来。而对于材料设计的应用程序,您需要等待大约 2 到 3 秒,只有 Toolbar 会变得可见。
首先,我想使用TraceView 来调试并找出缓慢的根本原因。但是,我意识到TraceView只能在已经启动的应用程序上使用。
我已经确认我没有在我的Application、Activity 和Fragment 中执行任何耗时的任务。由于我的全息应用程序和材料设计应用程序共享相同的逻辑代码,我无法弄清楚我的材料设计应用程序变慢的原因。
你们中有人遇到过同样的问题吗?我想知道,有什么好的方法可以让我找到根本原因吗?
【问题讨论】:
-
您使用的是 Android Studio 2.0 和 Instant Run 吗?还只是澄清一下-最终编译的版本是删除了所有日志记录等的“发布版本”,还是调试版本?我问的原因是,如果它仍然是调试版本并且您在 Android Studio 的最新稳定版本中使用“即时运行”选项,这会导致首次加载时出现延迟/白屏。如果确实如此,请禁用 Instant Run,构建项目并再次尝试运行。正如我所说,情况可能并非如此,因为我正在做一些假设。
-
我想说和@MarkKeen 一样,如果使用 studio 2.0,启动缓慢似乎是一个问题,但发布版本应该可以解决这些问题
-
“但是,我意识到 TraceView 只能在已经启动的应用程序上使用”——在
Debug上使用startMethodTracing()和stopMethodTracing()方法。尽早开始方法跟踪(例如,自定义Application的onCreate())。 -
ActionBar是主题的一部分,并且总是会立即显示,即使在Activity到达onCreate之前。由于Toolbar是作为活动布局的一部分膨胀的,因此在达到此阶段之前它不会可见。Application.onCreate和Activity.onCreate之间的初始化时间是您看不到任何条的时间,这是意料之中的。真正的衡量标准是从图标按下 -> 活动布局膨胀的时间。 -
感谢@MarkKeen。你说的对。如果我在发布模式下重建应用程序,并用密钥签名,3秒白屏将消失。
标签: android performance