2

我正在使用 XML 中定义的标准幻灯片动画来动画片段过渡。这些片段中的大多数都包含 ListViews(但并非总是如此)。90% 的时间,动画流畅且流畅。每隔一段时间,就会有口吃。检查logcat,出现卡顿时总会发生GC:

D/dalvikvm(26619): GC_FOR_ALLOC freed 300K, 9% free 13820K/15044K, paused 40ms, total 40ms

(感觉它只需要 GC 300 KB 似乎很奇怪)

无论如何在动画期间避免GC(之前或之后都可以)。在动画之前调用 System.gc() 不是一个好的选择,尤其是因为无法保证垃圾收集何时会发生。还有其他建议吗?

4

1 回答 1

3

你问错了问题......如果问题是你的动画是janky,那么你应该问“我怎样才能更深入地了解实际发生的事情? ” logcat 中的一些GC_FOR_ALLOC日志信息不足来分析这个问题。如果你的应用程序有时会出现性能问题,那不是因为你忘记打电话了System.gc(),相信我。:)

显然,避免垃圾收集的最佳方法是减少应用程序中的对象分配量......这是给定的。如果这些问题不是很明显,您可以使用 DDMS 中提供的“Allocation Tracker”来进一步分析这些问题。

我还建议观看这些视频……它们真的很棒,让您更深入地了解 Android 的图形渲染管道是如何工作的(Romain Guy 和 Chet Haase 也很搞笑:P)。

最后,我建议使用“设置-> 开发人员选项”中的工具对您有利。查看Romain Guy 的这篇博客文章以获取更多信息(请注意,这篇文章有点过时了......从 4.3 开始,这些工具变得更容易使用......他们谈论了对这些工具所做的更改上面链接的“Android 图形性能”视频)。如果您的目标是让动画达到或低于 60fps,则 Systrace 和/或 Profile GPU 渲染特别有用。

于 2013-08-21T16:19:44.033 回答