2016-05-16 2 views
1

私はSamsung Galaxy S4(Android 5.0.1)を持っています。 WebViewで2つのアプリケーションをテストしました。WebViewのガベージコレクタは、Androidアプリケーションを閉じることができますか?

1)地理的地図の1つにマークと線(パス)が使用されています。 10-20のシフトとズームをした後、OutOfMemoryで破砕した。

2)2番目の会社のサイトは、コルドバに統合されて使用されています。 20〜60ページの読み込みが終わると、OutOfMemoryで破棄されます。 私はメモリ割り当てを見ると、それは鋸のように振る舞います。ある制限まで増加した後に解放され、再び増加します。 2-4のピーク後、それは粉砕する。

他のデバイスでは、これらのクラッシュは再現されません。同じことがPlayMarketの返信にあります。

私はhttp://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications/を含む多くの記事を読んでいます。アプリケーションはAngular JSを使用します。 ChromeとFirefoxの開発者コンソールでテストしたところ、最大12Mbのピーク後にブラウザのガベージコレクタが起動したことがわかりました。

これらの質問があります。

1)WebViewには独自のガベージコレクタがありますか(Javascript GCと思いますか?)

2)WebViewが単なるビューである場合、なぜそれが破壊されないのですが、アプリケーション全体がクラッシュするのですか?

3)Android GCがWebView(多分Chromium GC)に影響し、WebViewがAndroid GCにメモリを解放するように指示する方法を教えてください。

+1

GCに関する回答については、http://stackoverflow.com/a/16530168を参照してください。 AndroidアプリでCrossWalkを使用して、すべてのAndroid搭載端末で同じWebviewを使用することができます(CrossWalkのバージョンによっては、一部のAndroidバージョンは互換性がありません)。 – user276648

+0

@ user276648、ありがとう、私もそれを見て、次にクロスウォークをセットアップしようとしましたが(しかしcouldnot、それはapkにいくらかの重みを加えます)。おそらくこの記事(https://auth0.com/blog/four-types-of-leaks-in-your-javascript-code-and-how-to-get-rid-of-them/)は面白いかもしれません。そうしたやり方でいくつかの研究を行った。 – CoolMind

+0

私が理解したように、問題は解決されました。開発者は旧バージョンのCordovaをアップグレードしました。 – CoolMind

答えて

0

誰も答えなかったので、私は答えます。

Chromeにデバイスを接続し、「chrome:// inspect」と入力して、時間の経過とともにメモリの拡散(JSヒープを含む)を監視しました。 Samsungデバイスでは、WebViewのイベント後にメモリが絶えず増加しました。 HTC(Android 2.3.3)では、それは増加し、その後GC(毎秒)で再び清掃されました。サムスンギャラクシーS4では、20Mbから30に引き上げられ、その後粉砕されました。 Galaxy Tab Aでは7 Mbから始まりましたので、崩壊しませんでした。

Chrome開発者コンソールでも、WebViewでGCの作業が示されました。メジャーGC、場合によってはマイナーGCを開始することもあります。私は、それがJavaのメモリをきれいにしていなかったので、それはWebViewのJavascript GCだと思います。

1)各プラットフォームのブラウザの実装には、それぞれ独自のGC(Javascript GCを含む)があります。

2)WebViewは非常に複雑なビューであるため、アプリケーションが簡単にクラッシュする可能性があります。

3)AndroidがWebViewにメモリを解放するように頼むかもしれないと思いますが、それはGCを起動します。しかし、プラットフォームによっては、WebView(HTC 2.3.3上)で使用されていたメモリを減らすことも、そのまま使用することもできます。 WebViewでGCを実行しても、アプリケーション内のメモリを解放しないことがよくあります。

関連する問題