【问题标题】:Reycle Bitmaps in Android在 Android 中回收位图
【发布时间】:2014-05-09 09:15:29
【问题描述】:

我正在使用谷歌地图视图并使用此代码向其添加标记:

googleMap.addMarker(new MarkerOptions()
.position(chargingStationObject.geoData)
.title(chargingStationObject.name)
.snippet(chargingStationObject.stationAvailability)
.data((chargingStationObject.id))
.icon(iconDescriptor));

iconDescriptor 是这样创建的:

iconDescriptor = BitmapDescriptorFactory.fromResource(getResources()
     .getIdentifier("mapicon", "drawable", getActivity().getPackageName()));

当我的地图上有太多标记时,堆会被填满,一段时间后应用程序因内存不足异常而崩溃。仅当地图上有或曾经有大量标记时才会发生这种情况。即使在我调用 .clear() 之后,堆仍然相当大。

也许位图没有被正确回收?

【问题讨论】:

  • 你知道集群吗?
  • 这段代码在循环内吗?
  • @Haresh 是的,但我有理由不使用集群。
  • @Biraj Zalavadia 是的,它在循环中。

标签: android bitmap recycle


【解决方案1】:

做事。

我假设,您对所有位置都使用相同的标记。

把条件放在这里

if(iconDescriptor==null){
            iconDescriptor = BitmapDescriptorFactory.fromResource(getResources().getIdentifier("mapicon", "drawable", getActivity().getPackageName()));
        }

不要为每个标记创建新的位图,只使用一个副本,看看会发生什么。

【讨论】:

  • iconDescriptor = BitmapDescriptorFactory... 只在 onCreate() 调用一次,我已经想到了 :)
  • 那你必须使用集群。
  • 好的,但是一旦这些使用过的位图不再显示在地图上,就不能回收它们吗(我不确定它们是否被回收,这就是我想启动的原因自己处理)
【解决方案2】:

要处理谷歌地图上的大量标记,必须使用 Google Maps Android Marker Clustering Utility

如需了解更多信息,请访问, https://developers.google.com/maps/documentation/android/utility/marker-clustering

【讨论】:

  • 正如我所说,我有我的理由不聚集我的标记:)
猜你喜欢
  • 2011-12-22
  • 2012-07-20
  • 2012-08-09
  • 2012-10-31
  • 2015-07-18
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多