理论教育 优化列表适配器:Adapter

优化列表适配器:Adapter

时间:2023-06-19 理论教育 版权反馈
【摘要】:Adapter和ListView控件密切相关,Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView()方法返回一个View。Adapter与View的连接主要依靠getView这个方法返回我们需要的自定义view。对ListView优化就是对Adapter中的getView方法进行优化。下面代码是Google IO大会给Adapter的优化建议:经过尝试以后,发现ListView确实流畅了许多。通过初始化1000条数据到Adapter显示在ListView中,然后滚动到底部,计算出“position=0”和“position=999”时的时间间隔。

优化列表适配器:Adapter

Adapter和ListView控件密切相关,Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView()方法返回一个View。Adapter与View的连接主要依靠getView这个方法返回我们需要的自定义view。ListView是Android应用程序中一个最常用的控件了,所以如何让ListView流畅运行,获取良好的用户体验是非常重要的。对ListView优化就是对Adapter中的getView方法进行优化。下面代码是Google IO大会给Adapter的优化建议:

978-7-111-51616-3-Part02-336.jpg

978-7-111-51616-3-Part02-337.jpg

经过尝试以后,发现ListView确实流畅了许多。

而下面是Google IO不建议的做法:

978-7-111-51616-3-Part02-338.jpg

针对上述两种方案,我们接下来做一个具体测试:测试场景是在getView的时候通过日志文件打印出position和当前系统时间。通过初始化1000条数据到Adapter显示在ListView中,然后滚动到底部,计算出“position=0”和“position=999”时的时间间隔。编者用此场景对上述两中方案进行测试,测试结果如下。

(1)优化建议测试结果:

978-7-111-51616-3-Part02-339.jpg

共耗时:17967

(2)没优化的测试结果

978-7-111-51616-3-Part02-340.jpg

共耗时:24535(www.daowen.com)

在1000条记录的情况下就有如此差距,一旦数据上万,或ListView的Item布局更加复杂的时候,优化的作用就更加突出了。

再考虑一个问题:假如在我们的列表中有1000000项时会发生什么情况呢?是不是会占用极大的系统资源?请读者看下面的代码:

978-7-111-51616-3-Part02-341.jpg

由此可见,如果超过1000000项时,可能会发生系统崩溃的后果。再来看下面的演示代码:

978-7-111-51616-3-Part02-342.jpg

而上面的代码会好很多,系统将会减少创建很多View的情形,性能得到了很大的提升。还有没有更好的方法呢?再来看下面的演示代码

978-7-111-51616-3-Part02-343.jpg

978-7-111-51616-3-Part02-344.jpg

上述代码会不会给系统带来很大的提升呢?看看下面三种方式的性能对比,如图6-1所示。

978-7-111-51616-3-Part02-345.jpg

图6-1 性能对比

事实正是如此,第三种的性能更加高效。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈