OOM是一种非常常见的ERROR当我们处理多张图片、大的Bitmap或者一些动画的时候。我们必须特别仔细的控制图片对象的创建和销毁。当你的程序申请的内存超出系统分配给你的堆大小时(heap limit)就会引起OOM。
Android的每个应用都运行在一个Linux进程上。每个Linux进程上都运行着一个Dalvik虚拟机。每个进程可以申请的内存大小都是有限制的,不同的设备(手机、平板)限制的内存大小可能会不同。当应用申请的内存超出进程的内存大小限制时就会引起OOM。
可能的原因:
以下是可能会引起OOM的原因:
1 当你的操作连续的申请大量内存,到达某个临界点时,你申请的内存超出了进程的内存限制大小。
2 内存泄露(Memory leak),之前的对象没有被GC回收。
3 运行时加载并处理大的Bitmap对象。加载整个Bitmap大于你实际所需的尺寸大小并且进行压缩处理。
最主要引起OOM的原因还是内存泄露,让我们看以下的例子:
Examples:
1 使用Activity context创建TextView
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
setContentView(label);
}
这意味着这个TextView持有一个指向Activity的引用。
(未完待续)原文地址:http://blogs.innovationm.com/android-out-of-memory-error-causes-solution-and-best-practices/