由完整的MessageQueue引起的Volley OutOfMemoryError

时间:2014-04-20 08:54:20

标签: android message-queue android-volley

我正在使用Volley库来下载某些项目的元数据,这些项目以XML格式返回。 对于合理数量的项目,一切都按预期工作,但是当它们太多 - 大约7000时 - 应用程序耗尽可用内存并且我收到此错误(被ACRA库捕获):

03-21 11:08:31.362: E/ACRA(16922): java.lang.OutOfMemoryError
03-21 11:08:31.362: E/ACRA(16922):  at java.lang.String.<init>(String.java:255)
03-21 11:08:31.362: E/ACRA(16922):  at java.lang.String.<init>(String.java:228)
03-21 11:08:31.362: E/ACRA(16922):  at com.android.volley.toolbox.StringRequest.parseNetworkResponse(StringRequest.java:67)
03-21 11:08:31.362: E/ACRA(16922):  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:121)

我还得到Choreographer消息抱怨丢帧。 我使用齐射来制作公共StringRequest,并且所有请求都由唯一的RequestQueue处理。

使用Eclipse MAT我发现大多数堆都被MessageQueue占用,但仍然存储了旧的XML。如果我要执行大量(数千)请求,这当然会导致应用程序崩溃。

如何清空MessageQueue?

1 个答案:

答案 0 :(得分:0)

作为Ficus Kirkpatrick本人stated,排球库将所有响应保存在内存中,因此它不是多重响应的最佳解决方案。

我很快就会切换到另一个网络库,因为它似乎是唯一可行的解​​决方案。

编辑:我终于使用改装+ okhttp找到了solution