内存泄漏
一般是由于程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使计算机内存被耗尽的现象。重启计算机即可,但根本解决办法还是对代码进行优化。
解决方法
1、动态回收内存。
System.gc();
2、为应用分配更多的内存。
a、在清单文件中的< application >节点下,添加如下代码:android:largeHeap="true"。
b、使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。
3、自定义内存大小。
使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存
4、如果是因为图片引起的OOM,其实就可以从图片下手。(使图片体积大小变小)
5、加载图片时在内存中做处理。(图片的边界压缩)
fun zoom(resources: Resources, width: Int, height: Int, placeHolder: Int): Bitmap {
val options = BitmapFactory.Options()
options.inJustDecodeBounds =true
BitmapFactory.decodeResource(resources, placeHolder, options)
options.inSampleSize = calculateInSampleSize(options.outWidth, options.outHeight, width, height)
options.inJustDecodeBounds =false
return BitmapFactory.decodeResource(resources, placeHolder, options)
}
private fun calculateInSampleSize(outWidth: Int, outHeight: Int, width: Int, height: Int): Int {
var inSampleSize =2
if (outWidth > width || outHeight > height) {
val heightRatio = Math.round(outHeight / height *1f)
val widthRatio = Math.round(outWidth / width *1f)
inSampleSize =if (heightRatio < widthRatio) heightRatioelse widthRatio
}
return inSampleSize
}
6、Context泄漏。
7、资源对象没关闭造成的内存泄漏。
8、注册没取消造成的内存泄漏。
9、集合中对象没清理造成的内存泄漏。
10、使用缓存技术。
网友评论