Android: 如何解决Bitmap java.lang.OutOfMemoryError?

6

当使用位图显示大型图像时,我遇到了java.lang.OutOfMemoryError错误。
为了调整位图大小,我参考了以下链接:保存位图和BitmapFactory.decodeFile

我的logcat如下:

FATAL EXCEPTION: main
java.lang.OutOfMemoryError
    at     android.graphics.Bitmap.nativeCreate(Native Method)
    at     android.graphics.Bitmap.createBitmap(Bitmap.java:604)
    at     android.graphics.Bitmap.createBitmap(Bitmap.java:551)
    at     com.android.restaurant.DescriptionPage.getResizedBitmap(DescriptionPage.java:327)
    at         com.android.restaurant.DescriptionPage.setDetailsIntoLayout(DescriptionPage.java:172)
    at com.android.restaurant.DescriptionPage.onCreate(DescriptionPage.java:101)
    at android.app.Activity.performCreate(Activity.java:4397)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834)
    at android.app.ActivityThread.access$500(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1027)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:132)
    at android.app.ActivityThread.main(ActivityThread.java:4135)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    at dalvik.system.NativeStart.main(Native Method)

1
你的代码可能有问题,或者手机内存不足。无论哪种情况,我们都无法帮助你,除非你发布你的代码。 - user377628
@Raman-Mystry - 请参考下面的“高效显示位图”文章。如果您仍然遇到问题,请执行以下操作:1)发布相关代码,2)告诉我们有关位图的一些信息(例如其在硬件和文件大小方面的大小!),3)在尝试加载位图之前告诉我们您的系统有多少内存。 - paulsm4
1
它真的会帮助你。 - Suvam Roy
2个回答

5

由于您没有发布您的代码,因此很难知道是否存在错误或可能需要改进的低效代码。

但通常情况下,JVM内存是有限的,因此加载大型图像可能会导致OutOfMemoryError。您可以尝试使用-Xmx选项增加JVM内存。这是第一种也是最简单的方法。

另一种方法是缩小您的图像(如果可能)。或者可能使用BMP以外的其他格式(例如JPG)。它保证了良好的质量并且需要更少的内存。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接