2014-09-28 33 views
9

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

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

下面是使用iOS 7下的Instruments Allocations和iPhone 5S的内存使用情况。正如你所看到的,当我加载和卸载一个关卡时,它会上下移动。另外,内存使用率非常低,大约为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.href =强制重新加载页面之前调用window.location.reload(true);。自8.1以来,这种黑客/解决方法不起作用。

+1

,可能与(或等于)这个问题这可能是同一个问题。如果是这样,我认为有一个补丁版本可用(请参阅jira门票中的注释)。 – sandstrom 2015-01-27 13:54:21

回答

4

终于解决了。

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

我安装了以下插件,修复了WKWebView中的文件加载错误。这让我使用WKWebView,它没有上面的内存错误。如果可以的话,请检查出来,并让我们知道,如果https://issues.apache.org/jira/browse/CB-8002:

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

+1

我使用了你建议的这个插件,它可以保持内存使用率低,但在加载spritesheets的某个点之后,应用程序就会下地狱。它不会崩溃或显示高内存使用率,但运行速度为2 fps。不仅仅是画布元素,而是一切。我听说有一点,加载图像时会发生这种情况(12000 x 12000价值的位图)我不需要一次所有的位图,所以我也试图用8.2重新加载希望其他技巧,它再次工作,但图像似乎在某处停留并放慢速度。有什么建议么? – bmanderscheid 2015-03-19 14:29:44

+0

嗨Nitzan,我正在努力解决同样的问题。感谢您的插件链接! 但是,使用它实际上会报告“com.apple.webkit”进程的内存增长问题,并且应用程序最终崩溃。 (https://github.com/Telerik-Verified-Plugins/WKWebView/issues/112) 你是否观察到类似的行为? 在此先感谢您的帮助。问候。 – Marc 2015-06-11 12:39:33

相关问题