【问题标题】:Android Garbage Collector freeing memory in the middle of an AJAX requestAndroid 垃圾收集器在 AJAX 请求中间释放内存
【发布时间】:2015-11-24 14:58:44
【问题描述】:

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

至于 AJAX 部分,我使用的是 qwest,这是一个使用 Promise 进行 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 时触发不同的操作。当我不使用自己的 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
 });

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

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

我对 Android 开发很陌生,尤其是在内存管理方面。垃圾收集器不允许我分配超过 7,76MB 的 RAM 是否正常?对于一个完整的应用来说,它似乎有点低。

你们有什么想法吗?

谢谢!

【问题讨论】:

  • 您已经证明 GC 是在您的请求的时间范围内执行的,这并不引人注目,并且您没有证实您相当古怪的断言,即在此过程中(错误地)收集了可达对象。我不买。抛出什么异常,和/或由于失败而产生什么错误代码?还是只是得到了意想不到的结果?
  • 我只是得到了意想不到的结果,qwest 它继续尝试,但一段时间后失败了。说已经过了最大执行时间。我认为这与 CrossWalk 有关?
  • 如果您只是得到意想不到的结果,那么最可能的原因是 您的 代码中存在缺陷。从它的名字来看,我想MyAppWebViewClient 是你自己的类;我会去那里看看。然而,我们要做的不仅仅是推测,您需要提供MCVE

标签: java android ajax garbage-collection crosswalk


【解决方案1】:

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

【讨论】:

  • 谢谢!所以堆大小是正常的。我通过 Java 执行大型 AJAX 请求解决了这个问题,然后将该数据传递回 webview,这样我就可以更好地控制内存的管理方式。这没关系,因为大型 AJAX 请求只在一个会话中执行一次。
猜你喜欢
  • 2013-12-14
  • 2019-02-10
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多