Я получаю серьезную утечку памяти при использовании карт Google для Android.Особенно это заметно при использовании mapController.animateTo.См. Пример кода: начиная с Амстердама, я направляюсь на юг в сторону Италии, увеличивая значение latlng, но в течение 3 минут размер кучи превышает 20 МБ, #object увеличивается до 68000 или более, и приложение вылетает.Кто-нибудь знает, в чем может быть причина или есть обходной путь?
public class MapsLeakActivity extends MapActivity
{
MapView mapView = null;
MapController mapController = null;
Location mLoc = new Location("");
GeoPoint mGP = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mapsleak);
mapView = (MapView) findViewById(R.id.mapviewml);
mapView.setKeepScreenOn(true);
mapView.setSatellite(false);
mapView.setBuiltInZoomControls(false);
mapController = mapView.getController();
mapController.setZoom(17);
// We start in Amsterdam
mLoc.setLatitude(52.29);
mLoc.setLongitude(5.09);
Timer timer = new Timer();
TimerTask moveOn = new TimerTask()
{
@Override
public void run()
{
// Italy here we come ;) (if it wasn't for the memoryleaking)
mLoc.setLatitude(mLoc.getLatitude() - 0.05);
mLoc.setLongitude(mLoc.getLongitude() + 0.05);
mGP = new GeoPoint((int)(mLoc.getLatitude() * 1E6), (int) (mLoc.getLongitude() * 1E6));
mapController.animateTo(mGP);
// System.gc(); Tried this already; does not help!
}
};
timer.schedule(moveOn , 1000, 2000);
}
@Override
protected void onResume()
{
super.onResume();
}
@Override
protected void onPause()
{
super.onPause();
}
@Override
protected void onDestroy()
{
super.onDestroy();
}
@Override
protected boolean isRouteDisplayed()
{
return (true);
}
}