1

在我的示例应用程序中,布局中有一个 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);
    }

}
4

0 回答 0