0

我构建了一个具有 6 页 ViewPager 的 Android 应用程序。对于每个页面都有一个我使用的小图像(不是背景,仅用于 ImageView)。

这些图像每个大约 130KB。我注意到,当这个活动开始时,我会收到这样的消息:

02-09 21:23:58.755: I/dalvikvm-heap(6478): Grow heap (frag case) to 49.015MB for 2457616-byte allocation

玩了一会儿,我也得到了一个OOM异常。

我不明白为什么这样大小的图像在加载时会占用太多空间。

有没有人遇到过这样的问题?有什么解决办法吗?

提前致谢!

[更新]

抱歉没有添加代码:)

下面是我在 ViewPager 中使用的 Fragment 的 onCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_selection, container, false);

        mSelectionImage = (ImageView) rootView
                .findViewById(R.id.selection_image);

        switch (mPageNumber) {
        case 0:
            mSelectionImage.setImageResource(R.drawable.img_sel_0);
            break;
        case 1:
            mSelectionImage
                    .setImageResource(R.drawable.img_sel_1);
            break;
        case 2:
            mSelectionImage.setImageResource(R.drawable.img_sel_2);
            break;
        case 3:
            mSelectionImage
                    .setImageResource(R.drawable.img_sel_3);
            break;
        case 4:
            mSelectionImage.setImageResource(R.drawable.img_sel_4);

            break;
        case 5:
            mSelectionImage
                    .setImageResource(R.drawable.img_sel_5);
            break;
        default:
            break;
        }


        return rootView;
    }
4

1 回答 1

1

您有 6 张图片,每张都是 png 格式,尺寸为 398x538 。

这意味着,默认情况下,它们都使用 6*4*398*538= 5,138,976 字节,大约为 5 MB。

这看起来不像您的 OOM 的真正原因。

您能否告诉我们更多有关该应用程序和可能导致此问题的其他事情的信息?

您是否有可能将文件放在 drawable-ldpi 或 drawable-mdpi 中?

在这种情况下,图像会占用更多时间,具体取决于您正在运行的设备的密度。

例如,如果您将它们全部放在 drawable-mdpi 中,但设备在 xdpi 屏幕上运行,这将占用 4 倍的内存(因为我们将宽度和高度都加倍)。它仍然没有接近你所拥有的 50MB。

于 2013-02-09T23:23:15.727 回答