【问题标题】:Memory leaks with MapView in a RecyclerViewRecyclerView 中的 MapView 内存泄漏
【发布时间】:2016-07-20 07:38:15
【问题描述】:

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

我加载 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 根映射.dz.af$a.f * 参考 maps.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
  • 设备:motorola google Nexus 6 shamu
  • Android 版本:6.0.1 API:23 LeakCanary:1.4-beta1 02804f3
  • 持续时间:watch=5791ms, gc=156ms, heap dump=11974ms, analysis=85902ms

【问题讨论】:

    标签: java android google-maps memory-leaks garbage-collection


    【解决方案1】:

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

     android:configChanges="orientation|screenSize"
    

    【讨论】:

    • 哇,真的吗?那行得通。你有一些阅读材料来解释这是怎么回事吗?
    • 即使解决了您的问题,您也不应该在每种情况下都使用此解决方案。这里解释得很好:stackoverflow.com/questions/7818717/…
    • 太好了,内容丰富。虽然它绝对是一个创可贴,但我能够在进行其他无关的配置更改时重现内存泄漏......但是这些对用户来说应该不那么频繁。
    • 我遇到了同样的问题,但您的解决方案对我不起作用。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2018-03-24
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多