volley- java.lang.OutOfMemoryError

时间:2016-02-06 18:07:07

标签: android android-volley android-json

我正在尝试在我的应用程序中使用json实现Volley库。但每次我运行它时,应用程序会冻结并崩溃,显示此日志消息。我无法弄清问题是什么?

java.lang.OutOfMemoryError: Failed to allocate a 36089274 byte allocation with 16769200 free bytes and 16MB until OOM
                                                                  at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
                                                                  at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125)
                                                                  at java.lang.StringBuffer.append(StringBuffer.java:278)
                                                                  at java.io.StringWriter.write(StringWriter.java:123)
                                                                  at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)
                                                                  at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)
                                                                  at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)
                                                                  at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658)
                                                                  at java.io.PrintWriter.append(PrintWriter.java:691)
                                                                  at java.io.PrintWriter.append(PrintWriter.java:31)
                                                                  at java.lang.Throwable.printStackTrace(Throwable.java:324)
                                                                  at java.lang.Throwable.printStackTrace(Throwable.java:300)
                                                                  at android.util.Log.getStackTraceString(Log.java:343)
                                                                  at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:60)
                                                                  at com.android.internal.os.RuntimeInit.access$200(RuntimeInit.java:44)
                                                                  at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86)
                                                                  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
                                                                  at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

3 个答案:

答案 0 :(得分:0)

您的应用使用了太多内存。 使用NDK或者如果您需要在应用程序标记中的AndroidManifest.xml中使用更多的东西 android:largeHeap=true

https://developer.android.com/guide/topics/manifest/application-element.html

答案 1 :(得分:0)

这里的问题是您尝试显示的图像/位图太大了。通常在图像为1mb +时发生 更有效地显示位图 要解决此问题,您可以查看此信息 http://developer.android.com/training/displaying-bitmaps/index.html

答案 2 :(得分:0)

你对Volley的处理有多大?你的内存耗尽,因为Volley正试图在你的记忆中写一个36mb的字符串。

要么点击不同的终点返回较少的数据,要么调查使用支持流式传输响应的其他库。

(Volley不适合流式传输大量数据link