更新android

时间:2015-11-04 08:31:53

标签: android google-maps memory-leaks

我正在开发一个涉及谷歌地图的Android应用程序,我正在更新用户的当前位置。使用内存监视器,我观察到每次onLocationChanged()调用LocationListener时都会分配少量内存。此函数调用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。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果手动触发GC时内存被释放,则意味着您没有真正泄漏任何内容。

我的一个好建议是将Leak Canary整合到您的项目中:

https://github.com/square/leakcanary

这是一个非常好的库,允许您查找应用程序中是否存在任何内存泄漏。 它需要自动定期内存转储并使用MAT(Memory Analyzer Tool)分析它们