图片越来越多,内存溢出已经成了不得不注意的问题了。
错误日志:11-03 12:36:54.812: ERROR/AndroidRuntime(5084): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
内存溢出主要由以下几种情况引起:
1.数据库的cursor没有关闭。
2.构造adapter没有使用缓存convertview。
3.调用registerReceiver后未调用unregisterReceiver()。
4.未关闭InputStream/OutputStream。
5.Bitmap使用后未调用recycle()。
6.Context泄漏。
前5种情况容易发现和解决,只要把该关的及时关闭,该调用的方法及时调用,就不会有太多问题,另外java里还有软引用帮助管理内存:
SoftReference<Bitmap> bitmap;
bitmap = new SoftReference<Bitmap>(pBitmap);
if(bitmap != null){
if(bitmap.get() != null && !bitmap.get().isRecycled()){
bitmap.get().recycle();
bitmap = null;
}
}
下面着重介绍Context泄漏。
这是一个很隐晦的内存泄露的情况。先看一个Android官网提供的例子:
private static Drawable sBackground;@Overrid