【摘要】:初始时,ListView会从BaseAdapter中根据当前的显示布局实例化一定数量的view对象,同时ListView会将这些view对象缓存起来。由此可以看出,如果不使用convertView,而是每次都在getView()中重新实例化一个View对象的话,不但浪费资源,而且也浪费时间,也会使得内存占用越来越大。
这也是大多数初学者容易忽视的问题,以构造ListView的BaseAdapter为例,在Base Adapter中用如下方法向ListView提供每一个item所需要的view对象。
初始时,ListView会从BaseAdapter中根据当前的显示布局实例化一定数量的view对象,同时ListView会将这些view对象缓存起来。当向上滚动ListView时,原先位于最上面的list item的view对象会被回收,然后被用来构造新出现的最下面的list item。这个构造过程就是由getView()方法完成的,getView()的第二个形参convertView就是被缓存起来的list item的view对象(初始化时缓存中没有view对象,convertView是null)。
由此可以看出,如果不使用convertView,而是每次都在getView()中重新实例化一个View对象的话,不但浪费资源,而且也浪费时间,也会使得内存占用越来越大。ListView回收list item的view对象的过程可以查看android.widget.AbsListView.java→void addScrapView(View scrap)方法。(www.daowen.com)
例如下面的演示代码就是不科学的:
优化后的代码如下所示:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
有关Android系统优化从入门到精通的文章