2014-09-28 74 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

相關問題