if (convertView != null) {
view = convertView;
populate(view, getItem(position));
...
} else {
view = new Xxx(...);
...
}
return view;
}
3.Bitmap对象不在使用时调用recycle()释放内存
有时我们会手工的操作Bitmap对象,如果一个Bitmap对象比较占内存,当它不在被使用的时候,可以调用Bitmap.recycle()方法回收此对象的像素所占用的内存,但这不是必须的,视情况而定。可以看一下代码中的注释:
/**
?Free up the memory associated with thisbitmap‘s pixels, and mark the
?bitmap as "dead", meaning itwill throw an exception if getPixels() or
?setPixels() is called, and will drawnothing. This operation cannot be
?reversed, so it should only be called ifyou are sure there are no
?further uses for the bitmap. This is anadvanced call, and normally need
?not be called, since the normal GCprocess will free up this memory when
?there are no more references to thisbitmap.
*/
4.试着使用关于application的context来替代和activity相关的context
这是一个很隐晦的内存泄漏的情况。有一种简单的方法来避免context相关的内存泄漏。最显著地一个是避免context逃出他自己的范围之外。使用Application context。这个context的生存周期和你的应用的生存周期一样长,而不是取决于activity的生存周期。如果你想保持一个长期生存的对象,并且这个对象需要一个context,记得使用application对象。你可以通过调用 Context.getApplicationContext() or Activity.getApplication()来获得。