My application crashes, showing this in logcat:
java.lang.OutOfMemoryError: (Heap Size=39047KB, Allocated=19932KB)
at android.graphics.BitmapFactory.nativeDecodeFile(Native Method)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:373)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:443)
at com.mApp.mobileapp.mActivity.onActivityResult(mActivity.java:196)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:153)
at android.app.Activity.dispatchActivityResult(Activity.java:4752)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3449)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3503)
at android.app.ActivityThread.access$1100(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1320)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:5109)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:991)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
at dalvik.system.NativeStart.main(Native Method)
While running this code:
String selectedImagePath = data.getStringExtra("imageByteCode");
try {
File imageFile = new File(selectedImagePath);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile
.getAbsolutePath());//line 196
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
base64code = selectedImagePath;
mImage.setImageBitmap(bitmap);
} catch (Exception e) {
}
Since i was catching it, i never expected it to crash the app. selectedImagePath
is the path of the selected image on the SD card, which never exceeds 3m.b but Heap Size=39047KB, Allocated=19932KB ??
Thank You
Place android:largeHeap="true"
in your Manifest file under the application tag.
The largeHeap tells the VM to give you more RAM so you can manage big bitmaps and Strings. LargeHeap works in api 12+.
And if you want to catch the error with try/catch block you need to use
try
{
}catch (OutOfMemoryError e) {
// TODO: handle exception
}
If you are experiencing this while building the project in Android Studio
Error:Uncaught translation error: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded
add in your build.gradle file
dexOptions {
javaMaxHeapSize "4g"
}
You did not catch it. OutOfMemoryError
is derived from Error
, not from Exception
. It is an Error
because normally an application is not supposed to catch it, there is close to nothing your application can do to recover.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With