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