2012-01-09 80 views
3

我的性能对比,特别是滚动ListView的速度,我创建的应用程序,以原生Android 4.0的应用程序 - 的Gmail,Gtalk的,等原生Android 4.0应用程序如何快速滚动ListViews?

有一两件事我注意到的是,一个ListView的滚动帧率原生Android应用程序非常高 - 几乎60fps。在我的应用程序中,ListView的滚动速度几乎没有那么快。

假设我使用ListView错误(这我不是 - 我已经按照这里的一切表示:http://www.youtube.com/watch?v=wDBM6wVEO70),我决定创建一个虚拟ListView只返回了十几几乎是空的LinearLayout意见,因为它是行(是的我正确使用convertView)。什么是令人不安这里是我的几乎空白ListView比任何本机应用程序的滚动性能下降 - 的Gmail,Gtalk的,联系人等

作为一个方面说明,一个简单的ScrollView具有真正好的滚动性能,但它是不可取为大型列表使用ScrollView

很明显,本机应用程序正在做某件事(或有权访问某件事物),我不明白。不幸的是这些原生应用程序不是开源的。有没有人对这些原生应用程序如何实现如此巨大的性能有所了解?

回答

0

有一些技术可以使ListView更快:缓存和使用不相关的列表项目作为新的列表项目以避免长时间创建它们。您需要根据ListView创建自己的课程来实现这些技巧。阅读更多here

+0

根据此视频,绝对不建议缓存视图:http://www.youtube.com/watch?v=wDBM6wVEO70 – 2012-01-09 05:23:44

0

我也跟着那个视频来建立我的列表视图。在我的应用程序中,没有太多项目(行)。但我认为,如果我们按照视频所说的那样行事,至少在理论上我们是正确的?

+0

我同意理论上只要我们跟着视频,我们就走在正确的轨道上。但是将结果与本机应用程序进行比较则证明不然 – 2012-01-09 15:17:53

1

查看本机电子邮件应用程序的源代码后,我发现邮件列表中的列表项是单视图,而不是像LinearLayout这样的ViewGroups。这使得一个非常平坦的View层次结构在滚动列表的同时导致更好的帧速率。我想我记得看过Romain Guy(一位Android UI领导人之一)的演讲视频,他提到Gmail团队做了类似的工作来提高性能。要自己做到这一点,你必须继承View的子类并在onDraw()方法中查看你自己的所有内容。

Here是当前电子邮件应用程序中消息列表项的来源。

他们在你膨胀一个视图(但不附加它)的情况下做了一个很酷的技巧,根据它所在的ViewGroup获取项目去的坐标,并缓存坐标在一个Map中,在列表中循环使用,您不必再次夸大该视图。我可能会在我的未来项目中尝试这个!

我希望这有助于!