cordova - PhoneGap 在 iOS8 中使用比 iOS7 更多的内存

标签 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)中,可以使用解决方法/hack 来释放:调用 window.location.reload(true); 在使用 window.location.href 强制页面重新加载之前=。从 8.1 开始,这个 hack/workaround 不起作用。

最佳答案

终于解决了。

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

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

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

关于cordova - PhoneGap 在 iOS8 中使用比 iOS7 更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089354/

相关文章:

android - Cordova - "config.xml"解析失败

ios - Phonegap/iOS — 禁用所选文本的弹出菜单

javascript - 温泉通知未定义 ios

c++ - 指针内存分配和删除

c - 如何将另一个指针所指向的地址中存储的值赋给一个指向的指针的地址?

ios - 检测点击 CCTableView 单元格

javascript - Phonegap 事件恢复

IOS无限后台时间

ios - UIView 动画完成 block 未被调用

c++ - 全局变量的分配 C++