在我的示例应用程序中,布局中有一个 ImageView:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bigimage" />
</FrameLayout>
图片的尺寸为(宽*高):2288*1712 位图配置默认为:ARGB_8888,所以加载到内存中的图片大小为:2288 * 1712 * 4byte = 15 668 224 byte 的内存限制我设备上的堆是 128 MB(我知道 Runtime.getRuntime().maxMemory() )。
如果我运行程序,我会得到 OutofMemoryException。但为什么?让我们看看下面的日志。15668240字节是可以的,就是我上面计算的。到目前为止没有问题。但是下面的 141014032 字节分配是什么?它从何而来?
08-26 18:21:35.133: I/dalvikvm-heap(31986): Grow heap (frag case) to 34.295MB for 15668240-byte allocation
08-26 18:21:35.204: I/dalvikvm-heap(31986): Forcing collection of SoftReferences for 141014032-byte allocation
08-26 18:21:35.224: E/dalvikvm-heap(31986): Out of memory on a 141014032-byte allocation.
主Activity(唯一的Activity)是:
package com.example.homokozo;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}