【问题标题】:How can a garbage collector in a WebView close Android application?WebView 中的垃圾收集器如何关闭 Android 应用程序?
【发布时间】:2016-05-16 12:50:01
【问题描述】:

我有三星 Galaxy S4 (Android 5.0.1)。我用 WebView 测试了 2 个应用程序。

1) 在其中之一中,地图与标记和线(路径)一起使用。经过 10-20 次轮班和缩放后,它被 OutOfMemory 压垮了。

2) 在第二个中,一个公司的站点被集成在 Cordova 中。在加载 20-60 个页面后,它也会因 OutOfMemory 而崩溃。 当我看到内存分配时,它就像一把锯子:在增加到某个限制后它会释放,然后再次增加。在 2-4 个峰值之后,它会压碎。

在其他一些设备上,这些美眉不会被复制。 PlayMarket 的回复也是如此。

我阅读了很多文章,包括http://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications/。应用程序使用 Angular JS。当我在 Chrome 和 Firefox 开发人员的控制台中对其进行测试时,我看到在达到 12 Mb 的峰值后,浏览器中的垃圾收集器启动了。

我有这些问题。

1) WebView 是否有自己的垃圾收集器(我认为是 Javascript GC)?

2)如果一个WebView只是一个View,为什么它没有被销毁,而是整个应用崩溃了?

3) Android GC 如何影响 WebView(可能是 Chromium GC)以及 WebView 如何告诉 Android GC 释放内存?

【问题讨论】:

  • 请参阅stackoverflow.com/a/16530168 以获得有关 GC 的答案。您可能希望在您的 Android 应用程序中使用 CrossWalk,以便在所有 Android 设备上使用相同的 web 视图(请注意,根据 CrossWalk 版本,某些 Android 版本不兼容)。
  • @user276648,谢谢,我也看到了,然后尝试设置 CrossWalk(但无法设置,它增加了 apk 的权重)。可能这篇文章(auth0.com/blog/…)可能会很有趣,我也是这样研究的。
  • 据我了解,一个问题已经解决了。开发人员升级了旧版本的 Cordova。

标签: android cordova webview garbage-collection


【解决方案1】:

没有人回答,我回复。

我将设备连接到 Chrome,输入“chrome://inspect”并按时观看内存(包括 JS 堆)的传播。在三星设备上,WebView 中的事件发生后内存不断增加。在 HTC (Android 2.3.3) 上它增加了,然后再次被 GC 清理(每秒)。在三星 Galaxy S4 上,它从 20 Mb 提升到 30,然后被粉碎。在 Galaxy Tab A 上,它从 7 Mb 开始,因此不会崩溃。

Chrome 开发者控制台还展示了 WebView 中的 GC 工作。有时它会启动 Major GC,有时会启动 Minor GC。我认为,这是 WebView 中的 Javascript GC,因为它没有导致 Java 中的内存清理。

1) 每个平台上的每个浏览器实现都有自己的 GC(包括 Javascript GC)。

2) WebView 是一个非常复杂的 View,所以它很容易压垮一个应用程序。

3) 我认为,Android 可能会要求 WebView 释放一些内存,它会启动它的 GC。但根据平台,它可以减少 WebView 使用的内存(在 HTC 2.3.3 上)或保持不变。因此,即使在 WebView 中运行 GC,它通常也不会释放应用程序中的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2019-02-10
    • 2011-06-19
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多