java.lang.OutOfMemoryError Even in a try-catch block?

↘锁芯ラ 提交于 2019-12-23 10:08:48

问题


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


回答1:


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.




回答2:


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"
}


来源:https://stackoverflow.com/questions/14812508/java-lang-outofmemoryerror-even-in-a-try-catch-block

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!