我目前正在我的应用程序中追逐一些掉落的帧。我向系统跟踪寻求帮助,但不幸的是,从它的输出来看我并不聪明。
这是我的踪迹视图..
我的问题基本上是在我的适配器中我正在创建相当大的列表项。这意味着当滚动适配器时,在一段时间内什么都不做,然后它必须创建相当大的视图。甚至我做了很多优化(obvi我做回收,我基本上避免了所有冗余对象实例化,..),有一些丢帧。它必须超过16ms:/
回到我的主要问题..我想我甚至会看到我在 getView 调用期间直接调用适配器的方法的痕迹。但我在那里看不到。我做错了什么吗?您是否从此跟踪视图中看到我的代码的主要瓶颈在哪里?我迷路了:/
谢谢。。
我想你已经发现了systrace必须告诉你的关键事情:在pid 527中,performTraversals
需要20+毫秒。 这似乎在getDisplayList
和drawDisplayList
之间平均分配。
如果你看一下Falcon Pro的案例研究,你会发现许多相似之处,尽管在这种情况下,大部分时间都花在了绘图上(因为主要的过度绘制)。 不过,该文章中描述的大多数技术通常都很有用;使用 TraceView、HierarchyViewer 和设备上的开发人员选项来查找低挂的性能问题。
如果您想在 systrace 中查看自己的方法,可以从 Android 4.3 开始添加自己的应用专用代码。 这里有一个例子。