当我使用位图显示大图像时,我得到了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)发布于 2012-04-16 14:14:57
由于您还没有发布您的代码,因此很难知道是否存在可以改进的bug或可能无效的代码。
但通常情况下,JVM内存是有限的,因此加载大图像会导致OutOfMemoryError。您可以尝试使用-Xmx选项来增加JVM内存。这是第一种也是最简单的方法。
另一种方法是减少你的图像(如果可能的话)。或者可能使用BMP以外的格式(例如JPG)。它保证了很好的质量,并且需要更少的内存。
发布于 2012-04-16 14:32:28
开发移动应用程序的挑战在于您的内存有限。
我记住的第一件事是尝试使用PNG(可移植网络图形)而不是BitMaps (如果可能的话)。
除此之外,这似乎是存在的问题,请检查这个:- http://code.google.com/p/android/issues/detail?id=8488
https://stackoverflow.com/questions/10169399
复制相似问题