当我发送大量数据请求时,Volley会给我返回内存不足异常。

3

我有一个页面查看器,在每个页面内都有一个列表视图。该列表视图将使用 Web 服务显示 10 条记录,因此页面查看器使用 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) 

你的 View pager 里有图片吗?你在应用程序中继承了 FragmentPagerAdapter 吗? - Shayan Pourvatan
2个回答

9

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


但是我以为请求队列是单例的,我不会有另一个实例?如果不是,您的意思是可能有多个请求同时发送到由多个请求队列调用的服务器。是吗? - Mohammed Subhi Sheikh Quroush
在看到你的帖子之前,我已经找到了答案。不过非常感谢,这是一个很棒的答案 :) - Mohammed Subhi Sheikh Quroush
我该怎么做?有没有这方面的例子?我也遇到了同样的问题。我猜是因为我在一个活动中放置了太多的Volley实例。 - emen
我也遇到了这种问题。如果有人有例子,请告诉我们以便理解发生了什么。在我的情况下,我创建了Volley的基类,并将其扩展到每个活动中,并每次将上下文传递给Volley函数。详细代码在这里http://androidpostbybhavik.blogspot.in/2015/11/generalize-web-api-calling-using-google.html?view=classic - Bhavikkumar

4

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

我将代码从以下形式更改:

public class Record {

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

}

to

public class Record {

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接