Adapter和ListView控件密切相关,Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView()方法返回一个View。Adapter与View的连接主要依靠getView这个方法返回我们需要的自定义view。ListView是Android应用程序中一个最常用的控件了,所以如何让ListView流畅运行,获取良好的用户体验是非常重要的。对ListView优化就是对Adapter中的getView方法进行优化。下面代码是Google IO大会给Adapter的优化建议:
经过尝试以后,发现ListView确实流畅了许多。
而下面是Google IO不建议的做法:
针对上述两种方案,我们接下来做一个具体测试:测试场景是在getView的时候通过日志文件打印出position和当前系统时间。通过初始化1000条数据到Adapter显示在ListView中,然后滚动到底部,计算出“position=0”和“position=999”时的时间间隔。编者用此场景对上述两中方案进行测试,测试结果如下。
(1)优化建议测试结果:
共耗时:17967
(2)没优化的测试结果
共耗时:24535(www.daowen.com)
在1000条记录的情况下就有如此差距,一旦数据上万,或ListView的Item布局更加复杂的时候,优化的作用就更加突出了。
再考虑一个问题:假如在我们的列表中有1000000项时会发生什么情况呢?是不是会占用极大的系统资源?请读者看下面的代码:
由此可见,如果超过1000000项时,可能会发生系统崩溃的后果。再来看下面的演示代码:
而上面的代码会好很多,系统将会减少创建很多View的情形,性能得到了很大的提升。还有没有更好的方法呢?再来看下面的演示代码
上述代码会不会给系统带来很大的提升呢?看看下面三种方式的性能对比,如图6-1所示。
图6-1 性能对比
事实正是如此,第三种的性能更加高效。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。