React-native-image-crop-picker: [Android] java.lang.OutOfMemoryError

Created on 24 Aug 2017  路  15Comments  路  Source: ivpusic/react-native-image-crop-picker

08-24 12:28:03.001 2853-2853/com.infotycoonmobile E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.infotycoonmobile, PID: 2853
java.lang.OutOfMemoryError: Failed to allocate a 4177932 byte allocation with 2769272 free bytes and 2MB until OOM
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
at com.reactnative.ivpusic.imagepicker.PickerModule.getBase64StringFromFile(PickerModule.java:391)
at com.reactnative.ivpusic.imagepicker.PickerModule.getImage(PickerModule.java:539)
at com.reactnative.ivpusic.imagepicker.PickerModule.getSelection(PickerModule.java:417)
at com.reactnative.ivpusic.imagepicker.PickerModule.cameraPickerResult(PickerModule.java:648)
at com.reactnative.ivpusic.imagepicker.PickerModule.onActivityResult(PickerModule.java:679)
at com.facebook.react.bridge.ReactContext.onActivityResult(ReactContext.java:265)
at com.facebook.react.ReactInstanceManager.onActivityResult(ReactInstanceManager.java:675)
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:149)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:77)
at android.app.Activity.dispatchActivityResult(Activity.java:7165)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4994)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)
at android.app.ActivityThread.access$1600(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Most helpful comment

compress function also cause out of memory

06-14 15:17:37.573 2763-2763/com.leightonphotolibrary E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.leightonphotolibrary, PID: 2763
java.lang.OutOfMemoryError: Failed to allocate a 80568588 byte allocation with 16777216 free bytes and 75MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
at android.graphics.Bitmap.createBitmap(Bitmap.java:856)
at android.graphics.Bitmap.createBitmap(Bitmap.java:787)
at id.zelory.compressor.ImageUtil.decodeSampledBitmapFromFile(ImageUtil.java:70)
at id.zelory.compressor.ImageUtil.compressImage(ImageUtil.java:33)
at id.zelory.compressor.Compressor.compressToFile(Compressor.java:60)
at com.reactnative.ivpusic.imagepicker.Compression.compressImage(Compression.java:63)
at com.reactnative.ivpusic.imagepicker.PickerModule.getImage(PickerModule.java:544)
at com.reactnative.ivpusic.imagepicker.PickerModule.getSelection(PickerModule.java:431)
at com.reactnative.ivpusic.imagepicker.PickerModule.cameraPickerResult(PickerModule.java:681)
at com.reactnative.ivpusic.imagepicker.PickerModule.onActivityResult(PickerModule.java:715)
at com.facebook.react.bridge.ReactContext.onActivityResult(ReactContext.java:253)
at com.facebook.react.ReactInstanceManager.onActivityResult(ReactInstanceManager.java:692)
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:126)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:75)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4181)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4228)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1564)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:6274)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

All 15 comments

do you have some time to try to debug this and submit a PR? thanks

What should I do?

try to figure out if we can somehow optimize getBase64StringFromFile method and it's memory usage to avoid OOM.

I'm using Android Studio. How should I do to debug the library inside my app?

I could not figure out how to avoid OOM

Is there any update for this?

Hi, there's any update for this? I put this issue a week ago. Please, I need a solution ASAP.

Hi I am also getting this errorr.

+1

compress function also cause out of memory

06-14 15:17:37.573 2763-2763/com.leightonphotolibrary E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.leightonphotolibrary, PID: 2763
java.lang.OutOfMemoryError: Failed to allocate a 80568588 byte allocation with 16777216 free bytes and 75MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
at android.graphics.Bitmap.createBitmap(Bitmap.java:856)
at android.graphics.Bitmap.createBitmap(Bitmap.java:787)
at id.zelory.compressor.ImageUtil.decodeSampledBitmapFromFile(ImageUtil.java:70)
at id.zelory.compressor.ImageUtil.compressImage(ImageUtil.java:33)
at id.zelory.compressor.Compressor.compressToFile(Compressor.java:60)
at com.reactnative.ivpusic.imagepicker.Compression.compressImage(Compression.java:63)
at com.reactnative.ivpusic.imagepicker.PickerModule.getImage(PickerModule.java:544)
at com.reactnative.ivpusic.imagepicker.PickerModule.getSelection(PickerModule.java:431)
at com.reactnative.ivpusic.imagepicker.PickerModule.cameraPickerResult(PickerModule.java:681)
at com.reactnative.ivpusic.imagepicker.PickerModule.onActivityResult(PickerModule.java:715)
at com.facebook.react.bridge.ReactContext.onActivityResult(ReactContext.java:253)
at com.facebook.react.ReactInstanceManager.onActivityResult(ReactInstanceManager.java:692)
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:126)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:75)
at android.app.Activity.dispatchActivityResult(Activity.java:6973)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4181)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4228)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1564)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:6274)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

I'm also having this issue,
Is there any way to handle this error temporary asking the user to select another image if it is so big to fit in memory?.

Also here:
Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 134189068 byte allocation with 4194304 free bytes and 94MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java)
at android.graphics.BitmapFactory.nativeDecodeStream(BitmapFactory.java)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:677)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:653)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:433)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:459)
at com.reactnative.ivpusic.imagepicker.Compression.resize(Compression.java:30)
at com.reactnative.ivpusic.imagepicker.PickerModule.croppingResult(PickerModule.java:733)
at com.reactnative.ivpusic.imagepicker.PickerModule.onActivityResult(PickerModule.java:764)
at com.facebook.react.bridge.ReactContext.onActivityResult(ReactContext.java:262)
at com.facebook.react.ReactInstanceManager.onActivityResult(ReactInstanceManager.java:703)
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:124)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:75)
at android.app.Activity.dispatchActivityResult(Activity.java:6500)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3925)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3972)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1537)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5728)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

@chpl how we can use it with crop-picker?

@chpl how we can use it with crop-picker?

instead of loading the full image here https://github.com/ivpusic/react-native-image-crop-picker/blob/0fba817a9721e83c4a7a42e3ad6c61336132b3a7/android/src/main/java/com/reactnative/ivpusic/imagepicker/Compression.java#L30 downscale it as described in the link above.

Was this page helpful?
0 / 5 - 0 ratings