我有一个 PhoneGap 应用程序。一个 HTML5 Canvas 游戏。它似乎在 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.reload(true);
在使用 window.location.href 强制页面重新加载之前=
。从 8.1 开始,这个 hack/workaround 不起作用。
最佳答案
终于解决了。
PhoneGap 默认使用 UIWebView,因为 WKWebView 中存在文件加载错误。上述错误只发生在 UIWebView 中。
我安装了以下插件来修复 WKWebView 中的文件加载错误。这让我可以使用没有上述内存错误的 WKWebView。
关于cordova - PhoneGap 在 iOS8 中使用比 iOS7 更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089354/