Android 上传图片OOM

一个需求需要拍照上传图片到服务器,在上传图片的时候出现OOM异常,
“java.lang.OutOfMemoryError: Failed to allocate a allocation until OOM”内存溢出错误是在Android app运行的时候出现的。

这可能是因为app RAM中缓存太多文件或反复实例化相同的位图和视频造成的内存不足现象,下面是我在运行时候所出现的错误详细信息。

05-25 14:05:01.875 14448-14448/.........E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cmbc.creditcard.cmms, PID: 14448
    java.lang.OutOfMemoryError: Failed to allocate a 22623916 byte allocation with 16769200 free bytes and 18MB until OOM
        at java.lang.StringFactory.newStringFromChars(Native Method)
        at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:629)
        at java.lang.StringBuffer.toString(StringBuffer.java:723)
        at java.io.StringWriter.toString(StringWriter.java:100)
        at com.google.a.f.b(Gson.java:604)
        at com.google.a.f.t(Gson.java:583)
        at XXXXXActivity.postClockInInfo(XXXXXActivity.kt:316)
        at XXXXXActivity.access$postClockInInfo(XXXXXdActivity.kt:55)
        at XXXXXActivity$initView$10.onClick(XXXXXActivity.kt:271)
        at android.view.View.performClick(View.java:5264)
        at android.view.View$PerformClick.run(View.java:21297)
        at android.os.Handler.handleCallback(Handler.java:743)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:150)
        at android.app.ActivityThread.main(ActivityThread.java:5621)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

对于这个异常,我们可以压缩图片,或者修改app配置;

下面是修改app配置:
可以在androidmenifest.xml文件中更改application配置,将hardwareAccelerated设置为false,largeHeap设置为true。


image.png

原因:

  • android:hardwareAccelerated = "true"的时候会牺牲内存来加快图片的加载速度。
  • android:largeHeap = "false"会限制app应用申请的内存大小。

你可能感兴趣的:(Android 上传图片OOM)