我刚刚遇到了这个问题。我的 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
尝试释放更多内存,以便请求可以完成,这没有多大帮助。
MyAppWebViewClient
是 的子类XWalkResourceClient
,它没有做那么多,只是在加载 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 是否正常?一个完整的应用程序似乎有点低。
你们有什么想法吗?
谢谢!