2016-03-31 33 views
1

すでに他の質問を確認しましたが、解決策はありませんでした。googleMap.setMyLocationEnabled(true)を使用していないため、問題ではありません。RecyclerViewのMapViewでメモリリークが発生した

MapViewをロードするアダプタは、hereです。

@Override 
    public void onMapReady(GoogleMap googleMap) { 
     //TODO: Allow user to update this 1-normal 2-satellite 3-Terrain 
     MapsInitializer.initialize(mContext); 

     gMap = googleMap; 
     gMap.getUiSettings().setAllGesturesEnabled(false); 

     googleMap.setMapType(1); 
     googleMap.getUiSettings().setMapToolbarEnabled(false); 

     // If we have map data, update the map content. 
     if (mMapLocation != null) { 
      updateMapContents(); 
     } 
    } 

地図が細かく読み込まれて機能するため、向きが変更された後にメモリ不足エラーが発生するだけです。

相続人LeakCanaryの出力:me.calebjones.spacelaunchnow.debugで

:1.0.0-DEBUG:28。 * me.calebjones.spacelaunchnow.MainActivityが漏れた: を* GCのROOT maps.dz.af $ AF *参照は *参照がandroid.widget *参照をmaps.dg.p.mParent maps.dz.af.k。 FrameLayout.mParent *参照com.google.android.gms.maps.MapView.mContext *リークme.calebjones.spacelaunchnow.MainActivityインスタンス

  • 。保持:2.3キロバイト
  • 参照キー:9007ff6a-0072-49ce-b8cc-afc17cb19a76
  • デバイス:モトローラGoogleのネクサス6シャム
  • Androidのバージョン:6.0.1 API:23 LeakCanary:1.4ベータ1 02804f3
  • デュレーション:ウォッチ= 5791ms、gc = 156ms、ヒープダンプ= 11974ms、解析= 85902ms

答えて

1

これをマニフェスト、アクティビティタグに追加してみましたか?

+0

実際にはどうですか?それはうまくいった。あなたは何が起こっているのかを説明するための読み物がありますか? –

+0

問題を解決したとしても、すべてのケースでこのソリューションを使用しないでください。それはここでよく説明されています:http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation –

+0

素晴らしい、有益です。その間違いなく、私は他の設定の変更を無関係にするときにメモリリークを再現することができます...しかし、それらはユーザにとってあまり頻繁ではありません。 –

1

ViewHolderにはGoogleMapがあります。メソッドonViewRecycledをオーバーライドしてメモリをクリーンアップする必要があります。

@Override 
public void onViewRecycled(FriendViewHolder holder) { 
if (holder.gMap != null) { 
     holder.gMap.clear(); 
     holder.gMap.setMapType(GoogleMap.MAP_TYPE_NONE); 
    } 
}