私のプロジェクトでは、MainActivity A(アプリケーションのナビゲーションを処理する)、フラグメント1(グリッドビュー)、フラグメント2(マップ)があります。Maps APIのメモリリーク
mainactivityのコールバックを使用してグリッドフラグメント(選択されたエントリのマーカーを表示)からマップフラグメントを呼び出しています。マップフラグメントに置き換えていくつかのargs(マーカーの詳細)を置き換えます。これまでの作業が、
すべてが一定の時間がのOutOfMemory例外を取得マップフラグメントを呼び出した後:
FATAL EXCEPTION: GLThread 400 Process: XXX , PID: 2378
java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 684253 free bytes and 668KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:812)
at android.graphics.Bitmap.createBitmap(Bitmap.java:789)
at android.graphics.Bitmap.createBitmap(Bitmap.java:756)
at com.google.maps.api.android.lib6.gmm6.m.c.i.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.l.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.l.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.l.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.b.ak.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.c.b.as.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.x.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.l.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.l.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.cj.g(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.cj.run(Unknown Source)
がtemporarlyようにマップマーカーのカスタム情報ウィンドウ用のビットマップを削除し、しようとしましたが、実際には影響しませんでした。マップフラグメントを置き換えるたびに、メモリが増加し、増加します。
古いマップをどのように処理するか、いくつかの方法で試していくつかの問題を見てみましたが、適切な解決策を見つけられませんでした。
これを追加マップメソッドの作成を2回呼び出す –
[LeakCanary](https://github.com/square/leakcanary)を使用してメモリリークを検出できます。 – Ziem
あなたはgetMapAsync()メソッドを意味しますか?これはonResumeで一度だけ呼び出されます。また、onDestroyのmap.clear()でマップを破棄しようとしましたが、他の問題で読んでも効果はありません。 – Norman