我在我的 Android 应用程序上运行了 Traceview,结果很糟糕:2200 毫秒。我与很多人交谈过,并被告知向上或向下堆栈并找到有问题的代码。问题是,当我一路向上或一路向下时,没有明显的迹象表明为什么(我知道你在嘲笑,因为你是对的,这是有原因的,但请阅读-我是新人)。
如果我查看 Excl CPU 时间,BitmapFactory.nativeAssetDecode 会花费大量时间,远远超过 1400 毫秒。显然,这是我的 Activity 问题的主要部分,但是,确定它的来源一直是一场噩梦。我的“直接”代码都没有在堆栈的这一部分附近(不是孩子,也不是父母),事实上,我所有的“直接”方法似乎都表现良好,仅在 0-4 毫秒内触发和完成将是预期的。
我发现的一件事是,如果我在 setContentView() 之后启动 Traceview,Traceview 日志下降到只有 90 毫秒。老实说,我太新了,无法理解这个结果,我知道这是误导性的,因为 setContentView() 当然需要时间,但也许我的布局导致花费太多时间?我的布局真的会导致 2110 毫秒吗?
这就是我感到困惑的地方。我的布局的透支为零,并且似乎是一个格式良好且非冗余的 XML 文件。我最大的布局中有 41 个视图小部件,我发誓我见过许多性能良好的活动,其中包含 100 多个视图小部件。我的视图基本上由 4 个布局和 36 个视图小部件(TextViews 等)设计,每个项目都有一个从 Style.xml 分配给它们的样式。我希望我没有占便宜并创造了一个怪物视图?
也许如果有人可以扩展理论以跟踪不是由您编写的直接代码引起的问题,或者隔离“失控”方法的 CPU 时间原因背后的理论,我将能够更好地帮助自己(上帝知道我已经试过了,事实上整个周末)。
TL;DR如果我在 onCreate 的 setContentView() 之后启动 Traceview,加载我的活动所需的时间比我在 setContentView() 之前少 2110 毫秒。不过,我的 Activity 视图并不十分复杂,所以我很困惑。
我非常感谢,瑞恩