页面卷曲效果中的android内存不足问题

时间:2012-11-11 18:43:09

标签: android 2d out-of-memory page-curl

在我的应用程序中,我尝试使用100个图像显示页面卷曲效果,如以下github链接中所述 - here

在示例代码中,他们只使用了两个图像,但在我的应用程序中,我使用了大约90个图像。这会导致应用程序崩溃,在logcat中说出以下问题

E/dalvikvm-heap(603): Out of memory on a 5529616-byte allocation.

当我尝试使用7张图像时效果很好。当我试图增加超过7时,它会崩溃。我的所有图像都在可绘制文件夹中。

在该github代码中,drawable的图像如下所示

mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page9));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page10));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page11));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page12));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page13));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page14));
        mPages.add(BitmapFactory.decodeResource(getResources(),R.drawable.page15));

如何解决此问题并加载所有图片,任何更好的建议......

2 个答案:

答案 0 :(得分:0)

您必须意识到Android中每个应用程序的堆非常有限,因此您无法使用与台式PC上相同的内存。以下是您可能想要使用的解决方案:

  1. 使用较小尺寸的图像。
  2. 优化您的应用程序行为,意味着您不应加载任何暂时未使用的Bitmaps,并在它们变得不必要时立即回收它们。
  3. 限制已经适合您的Bitmaps的数量。
  4. 希望您能够实施其中一项,以使您的应用程序更好地运作。

答案 1 :(得分:0)

使用延迟加载机制。不要一次将所有位图加载到内存中,在ArrayList中保存id,然后根据需要加载它们,并在使用它们之后,卸载位图,以便释放内存。