【问题标题】:Volley OutOfMemoryError caused by full MessageQueue由完整的 MessageQueue 引起的 Volley OutOfMemoryError
【发布时间】:2014-07-31 03:56:46
【问题描述】:

我正在使用 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 消息,抱怨丢帧。 我正在使用 volley 来实现通用 StringRequests,并且所有请求都由唯一的 RequestQueue 处理。

使用 Eclipse MAT 我发现大部分堆都被MessageQueue 占用,其中仍然存储着旧的 XML。如果我必须执行大量(数千个)请求,这当然会使应用程序崩溃。

如何清空消息队列?

【问题讨论】:

    标签: android message-queue android-volley


    【解决方案1】:

    作为 Ficus Kirkpatrick 本人 stated,volley 库将所有​​响应保存在内存中,因此它不是多个响应和大型响应的最佳解决方案。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 2017-05-27
      • 2018-11-24
      • 2019-10-09
      • 1970-01-01
      • 2014-01-05
      • 2015-01-28
      • 2014-01-07
      相关资源
      最近更新 更多