RecyclerView中的MapView内存泄漏



我已经检查了很多其他问题,但没有一个解决方案有效,我没有使用googleMap.setMyLocationEnabled(true),所以这不是问题所在。

我正在加载MapView的适配器位于此处。

    @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映射.dz.af$a.f*参考地图.dz.af.k*参考maps.dg.p.mParent*引用android.widget.FrameLayout.mParent*引用com.google.android.gms.maps.MapView.mContext*泄漏me.calebjones.spacelaunchnow.MainActivity实例

  • 保留:2.3 KB
  • 参考编号:9007ff6a-0072-49ce-b8cc-afc17cb19a76
  • 设备:摩托罗拉谷歌Nexus 6 shamu
  • 安卓版本:6.0.1 API:23 LeakCanary:1.4-beta1 02804f3
  • 持续时间:watch=5791ms,gc=156ms,heap-dump=11974ms,analysis=85902ms

ViewHolder中有GoogleMap。您应该覆盖ViewRecycled上的方法并清理内存:

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

您是否尝试将其添加到活动标记中的清单中?

 android:configChanges="orientation|screenSize"

最新更新