【问题标题】:Volley give me Out of memory exception after I make a lot of request with big amount of data在我用大量数据提出大量请求后,Volley 给我内存不足异常
【发布时间】:2014-01-31 08:04:23
【问题描述】:

我有一个 Page Viewer 并且在每个页面内我都有 list View ,这个列表视图将有 10 条使用 Web 服务的记录,因此页面查看器使用 Web 服务的三个调用来填充三个页面(当前,左侧和正确的页面)但是在我进行了很多滑动之后,我得到了这个异常:

java.lang.OutOfMemoryError: pthread_create (stack size 16384 bytes) failed: Try again
            at java.lang.VMThread.create(Native Method)
            at java.lang.Thread.start(Thread.java:1029)
            at com.android.volley.RequestQueue.start(RequestQueue.java:142)
            at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:66)
            at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78)
            at com.imona.android.entities.Record.<init>(Record.java:57)
            at com.imona.android.webservices.OperationalDataRest$1.onResponse(OperationalDataRest.java:109)
            at com.imona.android.webservices.OperationalDataRest$1.onResponse(OperationalDataRest.java:85)
            at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65)
            at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method) 

【问题讨论】:

  • 您的视图寻呼机中有图像吗?您是否在您的应用中扩展了FragmentPagerAdapter

标签: android out-of-memory android-volley


【解决方案1】:

你如何初始化你的RequestQueue?我怀疑您正在为每个选项卡创建RequestQueues。如果是这种情况,请将您的程序更改为使用所有选项卡中RequestQueue 的一个常见实例。您需要在 Activity 中初始化并保留它,并从每个选项卡向它添加请求。

【讨论】:

  • 但我认为请求队列是单例的,我不会有它的另一个实例?如果不是,您的意思是可以同时向多个请求队列调用的服务器发出多个请求。对吗?
  • 我在看你的帖子之前发现了答案但是非常感谢,这是一个很好的答案:)
  • 我该怎么做?有这方面的例子吗?我面临同样的问题。我想这是因为我在一项活动中放置了太多 Volleys 实例。
  • 我也面临这种问题。如果有人有示例,请告诉我们以了解发生了什么。在我的例子中,我创建了 volley 的基类,它扩展了每个活动,并且我将每个时间上下文传递给了 volley 函数。详细代码在这里androidpostbybhavik.blogspot.in/2015/11/…
【解决方案2】:

我使用静态队列而不是在我的 Record 类中创建新队列

我从

更改了代码
public class Record {

    private RequestQueue RecordSyncQueue = Volley.newRequestQueue(ImonaAndroidApp.app);

}

public class Record {

    private static RequestQueue RecordSyncQueue = Volley.newRequestQueue(ImonaAndroidApp.app);

}

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2013-10-09
    • 1970-01-01
    • 2016-09-02
    • 2012-10-23
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多