1
votes

I've already checked a bunch of other questions but none of the solutions have worked, I'm not using googleMap.setMyLocationEnabled(true) so thats not the problem.

The adapter that I am loading the MapView in is located 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();
        }
    }

The map loads fine and functions, I'm just getting Out of Memory errors after orientation changes.

Heres the output of LeakCanary:

In me.calebjones.spacelaunchnow.debug:1.0.0-DEBUG:28. * me.calebjones.spacelaunchnow.MainActivity has leaked: * GC ROOT maps.dz.af$a.f * references maps.dz.af.k * references maps.dg.p.mParent * references android.widget.FrameLayout.mParent * references com.google.android.gms.maps.MapView.mContext * leaks me.calebjones.spacelaunchnow.MainActivity instance

  • Retaining: 2.3 KB.
  • Reference Key: 9007ff6a-0072-49ce-b8cc-afc17cb19a76
  • Device: motorola google Nexus 6 shamu
  • Android Version: 6.0.1 API: 23 LeakCanary: 1.4-beta1 02804f3
  • Durations: watch=5791ms, gc=156ms, heap dump=11974ms, analysis=85902ms
2

2 Answers

2
votes

There are GoogleMap in your ViewHolder. You should override method onViewRecycled and clean memory:

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

Did you try adding this to your manifest, in the activity tag?

 android:configChanges="orientation|screenSize"