避免内存溢出的方法

OOM(Out Of Memory,内存溢出)是指程序在申请内存的时候,没有足够的内存空间供其使用,出现 Out Of Memory。比如申请了一个float,但给它存了double才能存下的数据,这就是内存溢出。

当我们的应用程序申请的内存资源超过Android系统为每个进程设置的最大内存限制时,系统就会抛出OOM错误。

1、查看手机每个应用程序最高可用内存

// 每个应用程序最高可用内存
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// 使用Log打印出来
Log.i("TAG", "Max memory is " + maxMemory + "KB");

2、每个程序都会有可使用的内存上限,这被称为堆大小(Heap Size)。

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// 堆大小
int heapSize = manager.getMemoryClass();
// 使用Log打印出来
Log.i("TAG", "Heap size is " + heapSize + "MB");

注意:以上两种方式查看的内存大小是一样的。

避免OOM的常见方法

1、避免不必要的大图载入,在把图片载入内存之前,先计算出一个合适的缩放比例,然后再载入。
2、采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存。
3、使用图像缓存,比如在ListView中加载大量图片时,只加载屏幕显示的资源,尚未显示的不加载;移出屏幕的资源及时释放。
4、不要在循环中创建过多的本地变量,慎用static。用static来修饰成员变量时,该变量就属于该类,而不是该类实例,它的生命周期是很长的。
5、自定义堆内存分配大小。

你可能感兴趣的:(避免内存溢出的方法)