Android垃圾收集器在AJAX请求中释放内存

时间:2015-11-24 14:58:44

标签: java android ajax garbage-collection crosswalk

我刚遇到这个问题。我的Android应用程序中有一个XWalkView(Crosswalk WebView)。在XWalkView内部我做了几个AJAX请求,问题是Java垃圾收集器在我正在执行请求时释放内存。因此请求无法完成。

至于AJAX部分,我正在使用qwest,这是一个使用promises进行AJAX请求的简单库。

这方面的Java代码非常简单,我不认为这是问题所在:

webView = (XWalkView)findViewById(R.id.walk_view);
webView.setResourceClient(new MyAppWebViewClient(webView));
webView.setWillNotCacheDrawing(true);
webView.load("file:///android_asset/www/index.html", null);

我添加了willNotCacheDrawing以尝试释放更多内存,以便请求可以完成,这没有多大帮助。

MyAppWebViewClientXWalkResourceClient的子类,它没有那么多,只是在加载PDF时触发不同的Action。当我不使用自己的ResourceClient时,也会出现问题。

HTML / JavaScript部分非常简单,下载量不超过0.5MB,请求如下:

qwest.get('my.server.com/api')
 .then(function(xhr, response) {
    // do work with response
    // to bad it never reaches this
 })
 .catch(function(xhr, response, e) {
    // I just get a timeout here,
    // there is no way the server is timing out,
    // it works perfectly on iOS, Web and any other platform
 });

我认为这与垃圾收集器有关,因为如果我查看内存监视器,这就是执行请求时发生的情况:

Garbage collector at work?

内存中的第一个“上升”是当请求开始时,一旦内存使用再次变得稳定,请求就会失败。我认为突然下降是垃圾收集器释放我刚为我的AJAX请求分配的内存..嗯。

我对Android开发很新,特别是在内存管理方面。垃圾收集器不让我分配超过7,76MB的RAM是正常的吗?完整的应用程序似乎有点低。

你们有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是真的异常,略小但不足为奇。如果您需要有关单个流程的可用堆内存的更多信息,请阅读How much memory for Android process上的memory management under Android官方文档。您将看到堆大小通常非常有限。