【发布时间】:2015-11-04 08:31:53
【问题描述】:
我正在开发一个涉及谷歌地图的 android 应用程序,并且我正在更新用户的当前位置。使用内存监视器,我观察到每次调用 LocationListener 的 onLocationChanged() 时都会分配少量内存。这个函数调用 drawMarker() 我更新标记。我对谷歌地图和内存管理相当陌生,我只想知道我的代码中是否存在内存泄漏,或者事情是否如此。当我触摸地图时会分配大量内存,我认为它与内部代码有关,而不是我的,因为触摸地图时我什么都不做。以下是每次更新位置时执行的代码,如果我关闭 GPS,则不会更新位置,因此不会增加内存。
public void onLocationChanged(Location location) {
// redraw the marker when get location update.
drawMarker(location);
location = null;
}
private void drawMarker(Location location){
mMap.clear();
LatLng currentPosition = new LatLng(location.getLatitude(),location.getLongitude());
if(currentLocationMarker == null) {
mMap.addMarker(new MarkerOptions()
.position(currentPosition)
.snippet("Lat:" + location.getLatitude() + "Lng:" + location.getLongitude()));
}
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(currentPosition, 15);
mMap.animateCamera(update);
update = null;
currentPosition = null;
location=null;
}
同一个 LatLng 对象不能重复使用,因此每次都需要创建一个新对象。我猜内存的增加来自每次执行的两个内存分配语句,但我不确定这是否是一个问题。我也没有看到任何垃圾收集发生,除非我明确要求来自 android studio 的垃圾收集。
感谢任何帮助!
【问题讨论】:
标签: android google-maps memory-leaks