Android:如何解决位图java.lang.OutOfMemoryError?

时间:2012-04-16 06:08:09

标签: android bitmap out-of-memory

使用位图显示大图时,我得到java.lang.OutOfMemoryError
为了调整位图大小,我引用了以下链接Save Bitmap and 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)

2 个答案:

答案 0 :(得分:5)

由于您尚未发布代码,因此很难知道是否存在可以改进的错误或可能无效的代码。

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

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

答案 1 :(得分:0)

开发移动应用程序的挑战在于内存有限。

我首先想到的是尝试使用PNG(便携式网络图形)而不是BitMaps(如果可能的话)。

除此之外,似乎这是现有问题,请检查: - http://code.google.com/p/android/issues/detail?id=8488