SimpleAdapteradapter=newSimpleAdapter(this,getData(),R.layout.timenotes_item_left,newString[]{"text1","text2","text3"},newint[]{R.id.textView2,R.id.textView3,R.id.textView4}){@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){MapitemData=(Map)getItem(position);inttype=Integer.parseInt(itemData.get("type").toString());ViewitemView=null;switch(type){case0:Log.d("adapter","type0");itemView=View.inflate(getApplicationContext(),R.layout.timenotes_item_left,null);break;case1:Log.d("adapter","type1");itemView=View.inflate(getApplicationContext(),R.layout.timenotes_item_right,null);break;default:Log.d("adapter","typedefault");break;}returnitemView;}};ListViewlistView=(ListView)findViewById(R.id.listView1);listView.setAdapter(adapter);


以上代码存在内存泄漏的问题,详细原因如下:

构造Adapter时,没有使用缓存的 convertView
描述:
以构造ListView的BaseAdapter为例,在BaseAdapter中提高了方法:
public View getView(int position, View convertView, ViewGroup parent)
来 向ListView提供每一个item所需要的view对象。初始时ListView会从BaseAdapter中根据当前的屏幕布局实例化一定数量的 view对象,同时ListView会将这些view对象缓存起来。当向上滚动ListView时,原先位于最上面的list item的view对象会被回收,然后被用来构造新出现的最下面的list item。这个构造过程就是由getView()方法完成的,getView()的第二个形参 View convertView就是被缓存起来的list item的view对象(初始化时缓存中没有view对象则convertView是null)。
由此可以看出,如果我们不去使用convertView,而是每次都在getView()中重新实例化一个View对象的话,即浪费资源也浪费时间,也会使得内存占用越来越大。ListView回收list item的view对象的过程可以查看:
android.widget.AbsListView.java --> void addScrapView(View scrap) 方法。
示例代码:
public View getView(int position, View convertView, ViewGroup parent) {
View view = new Xxx(...);
... ...
return view;
}
修正示例代码:
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView != null) {
view = convertView;
populate(view, getItem(position));
...
} else {
view = new Xxx(...);
...
}
return view;
}

参考资料:http://blog.csdn.net/com360/article/details/6682409

更多相关文章

  1. android 从webview中读取缓存的图片
  2. android 打开摄像头的代码
  3. Android有用代码片段(一)(二)....
  4. android对大图片的缓存处理
  5. android计算器简单实现代码
  6. 代码获取Android的VersionCode和VersionName信息
  7. Android加载Gif动画实现代码
  8. android 根据SD卡中图片路径读取并显示SD中的图片――源代码

随机推荐

  1. Android(安卓)之 对话框总结
  2. android 定时拍照并发送微博
  3. 问题的解决: android sdk 2.1 update中Fa
  4. Android(安卓)layout属性大全
  5. android下的junit test
  6. view属性大全
  7. Android判断应用是否存在
  8. android getLastKnownLocation null
  9. AndroiManifest.xml文件中android属性
  10. Android(安卓)Media Framework 总纲