Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: How to solve Bitmap java.lang.OutOfMemoryError?

I'm getting java.lang.OutOfMemoryError when using bitmap to show large images.
For resizing the bitmap, I referred following link Save Bitmap and BitmapFactory.decodeFile.

My logcat is as follows:

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)
like image 748
Pattabi Raman Avatar asked Apr 16 '12 06:04

Pattabi Raman


1 Answers

Since you have not posted your code it is hard to know whether there is a bug or probably ineffective code that can be improved.

But generally the JVM memory is limited, so loading of big image can cause OutOfMemoryError. You can try to increase the JVM memory using -Xmx option. This is the first and the simplest way.

Other way is to decrease your image (if it is possible). Or probably use format other than BMP (e.g. JPG). It guarantees good quality and requires less memory.

like image 79
AlexR Avatar answered Nov 15 '22 03:11

AlexR