【问题标题】:PhoneGap using way more memory in iOS8 than iOS7PhoneGap 在 iOS8 中使用比 iOS7 更多的内存
【发布时间】:2014-11-23 05:21:53
【问题描述】:

我有一个 PhoneGap 应用程序。一个 HTML5 画布游戏。它似乎在 iOS 8(包括 8.0.2)中比 iOS 7 使用了更多的内存。

除了使用更多内存之外,JS 垃圾收集器似乎永远不会释放它所持有的内存。它正确地收集“释放”的内存,但从未将其释放回供 iOS 使用。

这是在 iOS 7 和 iPhone 5S 下使用 Instruments Allocations 的内存使用情况。正如你所看到的,当我加载和卸载一个关卡时它会上下波动。内存使用率也很低,大约 23mb,最大 41.81mb

这是在装有 iOS 8.0.2 的 iPhone 5S 上运行的同一个应用程序。如您所见,内存使用量永远不会下降,它使用的内存要多得多。事实上,当我加载和卸载同一级别时,内存使用量会一直上升。它没有上升那么高,这让我认为 JS 正确地重用了垃圾收集器中的内存,但是 GC 似乎从来没有释放它保留给操作系统的内存。此外,整个应用程序似乎比以前使用了更多的内存。

该应用程序的运行速度也慢了很多,在我停止它时达到了 121mb。

我应该补充一点,在卸载关卡时我会重新加载页面,奇怪的是在 iOS 8 下这并没有释放任何内存。

有没有人知道可能导致此问题的原因以及解决方案可能是什么?这是 iOS 8 中的错误吗?

在 8.0(但不是 8.1)中,可以使用解决方法/hack 来释放:在使用 window.location.href = 强制重新加载页面之前调用 window.location.reload(true);。从 8.1 开始,这个 hack/workaround 不起作用。

【问题讨论】:

  • 可能与此问题有关(或相同):issues.apache.org/jira/browse/CB-8002 如果可以,请检查一下,如果这可能是同一个问题,请告诉我们。如果是这样,我认为有可用的补丁版本(请参阅 jira 票证中的注释)。

标签: cordova memory ios7 ios8


【解决方案1】:

终于解决了。

PhoneGap 默认使用 UIWebView,因为 WKWebView 中存在文件加载错误。上述错误只发生在 UIWebView 中。

我安装了以下插件来修复 WKWebView 中的文件加载错误。这让我可以使用没有上述内存错误的 WKWebView。

https://github.com/Telerik-Verified-Plugins/WKWebView

【讨论】:

  • 我正在使用您建议的这个插件,它可以保持较低的内存使用率,但是在加载 spritesheets 的某个点之后,应用程序就会陷入困境。它不会崩溃或显示高内存使用率,但以 2 fps 的速度运行。不只是画布元素,而是一切。我听说在加载图像时会发生这种情况(12000 x 12000 的位图)停留在某个地方并放慢速度。有什么建议吗?
  • 嗨,Nitzan,我正在努力解决同样的问题。感谢插件链接!然而,使用它实际上报告了“com.apple.webkit”进程的内存增长问题,应用程序最终崩溃。 (github.com/Telerik-Verified-Plugins/WKWebView/issues/112) 你是否观察到类似的行为?在此先感谢您的帮助。问候。
猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2013-11-14
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多