美文网首页
Android 上传图片OOM

Android 上传图片OOM

作者: Lost_Robot | 来源:发表于2020-05-25 14:31 被阅读0次

    一个需求需要拍照上传图片到服务器,在上传图片的时候出现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

          本文链接:https://www.haomeiwen.com/subject/bwjyahtx.html