Android利用convertView优化ListView性能 http://www.eoeandroid.com/thread-200168-1-1.html (出处: eoe Android开发者社区_Android开发论坛)
基本的getView写法 Java代码 public View getView(int position, View convertView, ViewGroup parent) { View view = new View(); //通过inflate等找到布局 然后findViewById等 设置各个显示的item return view; } 而在ListView滑动的过程中 很容易就会发现每次getView被执行 都会new出一个View对象 长此以往会产生很大的消耗 特别当item中还有Bitmap等 甚至会造成OOM的错误导致程序崩溃 在看getView提供的参数时 可能已经注意到了 有一个参数View convertView 而这个convertView其实就是最关键的部分了 原理上讲 当ListView滑动的过程中 会有item被滑出屏幕 而不再被使用 这时候Android会回收这个条目的view 这个view也就是这里的convertView 在上面的做法中 当item1被移除屏幕的时候 我们会重新new一个View给新显示的item_new 而如果使用了这个convertView 我们其实可以复用它 这样就省去了new View的大量开销 下面就是使用convertView后的情况 Java代码 public View getView(int position, View convertView, ViewGroup parent) { View view = null; if (convertView != null) { view = convertView; //复用了回收的view 只需要直接作内容填充的修改就好了 } else { view = new Xxx(...); //没有供复用的view 按一般的做法新建view } return view; } 这样一来 就避免了反复创建大量view的问题了
只有在convertView为null时才去实例化控件,创建convertView对象、holder对象,其中convertView对象是通过mInflater.inflate(R.layout.main, null)方法,从一个main.xml布局文件中加载并创建的。
直接从XML文件中解析文件非常消耗内存 Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。 |
convertView用法
最新推荐文章于 2019-12-13 16:23:05 发布