Android 如何在循环中执行网络请求时释放内存?

Android 如何在循环中执行网络请求时释放内存?,android,memory-leaks,android-volley,request-queueing,Android,Memory Leaks,Android Volley,Request Queueing,更新: gc将仅在final}之后工作,这意味着只有在整个for循环完成之后,gc垃圾收集才会运行一次。那么,这里有没有可以使用的编程模式?有点像for循环,但同时也允许gc运行每个迭代。我不知道我是否已经说清楚了。。。我可以忍受gc运行每个迭代导致的性能下降 我在一个android项目上使用了截击,但我无法得到一个有效的解决方案 基本上,我有一个巨大的收集的东西,我会通过http和截击库发送。当我发送10个时,这没有问题,但如果我持续发送,最终会耗尽所有内存,应用程序会因为占用的热空间而终止

更新:

gc将仅在final}之后工作,这意味着只有在整个for循环完成之后,gc垃圾收集才会运行一次。那么,这里有没有可以使用的编程模式?有点像for循环,但同时也允许gc运行每个迭代。我不知道我是否已经说清楚了。。。我可以忍受gc运行每个迭代导致的性能下降

我在一个android项目上使用了截击,但我无法得到一个有效的解决方案

基本上,我有一个巨大的收集的东西,我会通过http和截击库发送。当我发送10个时,这没有问题,但如果我持续发送,最终会耗尽所有内存,应用程序会因为占用的热空间而终止

下面是演示代码块

requestqueue = Common.getQueue();//it will get a normal requestqueue
for (int i = 0; i < waitinglist.size(); i++) {

    synccopyreq.filedatas.add(Common.getDataFromWaitinglist(i));
    Common.httpPostWithQueue( requestqueue,"tagfullcopy", httpEndPoint+"/sync/fullcopy", gson.toJson(synccopyreq), that, new Common.CallbackInterface() {
        @Override
        public void completed(String result)
        {
            Log.i("shawhu","ok done");
        }
    });
//this was added but it doesn't work unfortunately
//using System.gc() like so was not recommended and most of the time wont'be effective either, I knew that.
System.gc();


}

请看这篇文章,我试过分析器,当整个过程完成时,比如处理10个项目时,内存使用会下降,但是如果我连续运行它,它不会下降。内存使用量持续上升,最终会破坏被android系统终止的应用程序。如何在循环中的每次迭代中释放内存


请帮帮我,谢谢

在有自己GC的语言中,没有明确的方法手动释放内存

但是,您可以使用System.GC在Java中请求GC调用

请参阅:

注意:尽管我们可以随时随地调用此方法,但它仍然不能保证垃圾收集立即运行


不过,我不建议像这样使用GC,因为每次GC调用都可能影响主线程的性能

如果您将请求发送到的API是您自己的API,那么我建议在API端一次执行一个包含所有数据的请求,而不是一系列请求。对于非常频繁的请求,依赖HTTP请求不是一个好的做法。您也可以选择WebSocket来执行这种类型的一系列请求。它比HTTP请求更适合您。@HarshvardhanJoshi感谢您的回答,不幸的是,每个httprequest的大小都有好几MB,因此我无法将数百个HTTP请求合并为一个。websockets可能是一个很好的解决方案,但我们已经签订了太多的合同。我想这将是我们最后的选择,但在此之前,我们真的希望能找到一个使用http+循环结构的解决方案。实际上,这有点像一个不断运行的永无止境的循环,就像一个事件循环。很抱歉,这是尝试过的。仅仅在每个循环中调用System.gc是不够有效的。我应该相应地修改我的问题。谢谢你的提示。