google maps android api v2中的java.lang.OutOfMemoryError

google maps android api v2中的java.lang.OutOfMemoryError,java,android,google-maps,Java,Android,Google Maps,我写这个程序是为了重叠圆圈,以显示我在哪里使用过谷歌地图android api v2。大约2小时后,我得到java.lang.OutOfMemoryError,堆大小大于分配的大小。从堆栈跟踪。。。(堆大小=98304KB,分配=86536KB) 为什么要占用这么多内存来存储所有这些重叠的圆 public void onLocationChanged(Location location) { CircleOptions circleOptions = new CircleOption

我写这个程序是为了重叠圆圈,以显示我在哪里使用过谷歌地图android api v2。大约2小时后,我得到java.lang.OutOfMemoryError,堆大小大于分配的大小。从堆栈跟踪。。。(堆大小=98304KB,分配=86536KB)

为什么要占用这么多内存来存储所有这些重叠的圆

public void onLocationChanged(Location location) {

     CircleOptions circleOptions = new CircleOptions()
        .center(new LatLng(location.getLatitude(), location.getLongitude()));

    circleOptions.radius(10); // In meters

          mMap.addCircle(circleOptions);

}

有没有关于如何缓解这种情况的建议?我想保留这些圆,因此不能使用map.clear()。我还需要继续使用圆圈,因为它允许我在地图上设置路径宽度。

位置管理器可以获取以下参数:

provider        the name of the provider with which to register
minTime         minimum time interval between location updates, in milliseconds
minDistance     minimum distance between location updates, in meters
listener        a LocationListener whose onLocationChanged(Location) method will be called for each location update

locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 200, 0, this);

增加位置更新之间的最小时间间隔或距离将减少地图上的圆圈,从而增加程序在达到最大堆大小之前可以运行的时间。

您需要对其进行优化。也许你在同一个坐标上画圆。您绘制的每个圆都是内存分配,因此请尝试查看是否多次使用相同的位置调用
onLocationChanged

您认为调用
onLocationChanged
的频率如何?你认为两小时后你有多少圈?你是回收还是再利用它们?当设备关闭屏幕时,您是否关闭了侦听器?这是一个可怕的问题解决方案,因为您仍然会遇到相同的问题