PhoneGap在iOS8中使用的方式比iOS7更多

时间:2014-09-28 20:32:03

标签: cordova memory ios7 ios8

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

除了使用更多内存之外,JS垃圾收集器似乎也没有释放它所拥有的内存。它正在收集"释放"内存正确,但永远不会释放回来供iOS使用。

以下是在iOS 7和iPhone 5S下使用Instruments Allocations的内存使用情况。你可以看到它在我加载和卸载一个级别时上下移动。内存使用率也非常低,约为23mb,最高为41.81mb

PhoneGap Canvas app running under iOS 7

这是使用iOS 8.0.2的iPhone 5S上运行的相同应用程序。正如您所看到的,内存使用量永远不会下降,并且它会占用更多内存。事实上,当我加载和卸载相同级别时,内存使用量会持续上升。它没有上升,这让我觉得JS正确地重用垃圾收集器中的内存,但GC似乎永远不会释放它阻止回存到操作系统的内存。此外,整个应用程序似乎使用比以前更多的内存。

该应用程序也运行得慢得多,到我停止时达到了121mb。

PhoneGap Canvas app running under iOS 8

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

有没有人有任何想法可能导致此问题以及解决方案可能是什么?这是iOS 8中的错误吗?

在8.0(但不是8.1)中,可以免费使用变通方法/黑客攻击:在强制使用window.location.reload(true);重新加载页面之前调用window.location.href =。从8.1开始,这种黑客攻击/解决方法无法正常工作。

1 个答案:

答案 0 :(得分:4)

终于解决了。

由于WKWebView中的文件加载错误,PhoneGap默认使用UIWebView。上述错误仅在UIWebView中发生。

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

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