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对大图片的缓存处理
  2. Android部分错误以及解决方案汇总
  3. android activity 相互传值
  4. Android(安卓)工具类 —— 截屏
  5. android 从webview中读取缓存的图片
  6. android如何让webview里的资源访问本地缓存
  7. Android中使用HttpURLConnection和HttpClient实现GET和POST请求
  8. android 5.0之后利用Intent传递Serializable对象存在问题
  9. Android面试宝典2020-持续更新

随机推荐

  1. Android的运行效率问题
  2. Android夜间模式最佳实践
  3. Android 下搭建 基于Phonegap Web App
  4. [Android]中文API(一)android包下的那些
  5. Ubuntu编译Android系统源码问题记录
  6. 食客还是大厨
  7. 充实的九月,我要毕业了!
  8. Mono for android真难用
  9. Android(安卓)jni编译时 Android.mk文件
  10. android jni 学习之一