我有一个带有MapView的Android应用程序,它可以连续运行几个小时,用户手机上的用户交互最少。我发现,经过一段时间后,MapView会发生一些事情,使它变得完全无法使用。
应用程序不会崩溃,地图仍然存在,但它似乎已损坏。捏/滚动地图会导致瓷砖摇晃并飞来飞去,并且标记会随机弹跳。这听起来像是有人遇到过的吗?
编辑:以下代码大约每10秒运行一次:
public void updateMarkers(boolean centerMap)
{
log("updateMarkers(" + centerMap + ")");
int vehicLat = (int) (AppState.getLatitude() * 1e6);
int vehicLng = (int) (AppState.getLongitude() * 1e6);
GeoPoint vehiclePoint = new GeoPoint(vehicLat, vehicLng);
List<Overlay> currentOverlays = mapView.getOverlays();
if(!currentOverlays.isEmpty())
{
currentOverlays.clear();
mapView.postInvalidate();
}
Drawable drawable = getResources().getDrawable(R.drawable.car);
MapOverlay iconOverlay = new MapOverlay(drawable, this);
OverlayItem iconPoint = new OverlayItem(vehiclePoint, "", "");
iconOverlay.addOverlay(iconPoint);
currentOverlays.add(iconOverlay);
if(centerMap)
{
mapController.setCenter(vehiclePoint);
mapController.setZoom(17);
}
mapView.postInvalidate();
}
答案 0 :(得分:1)
假设错误出现在该部分代码中,问题很可能是:
Drawable drawable = getResources().getDrawable(R.drawable.car);
MapOverlay iconOverlay = new MapOverlay(drawable, this);
当你真正需要时,你正在制作一个可绘制的对象1.在我使用Android的经验中,drawables(和Bitmaps)上的垃圾收集非常差(如果你读得足够多,你会开始怀疑如果真的坏了......)。这就是我要做的事情:
null
。 示例:
List<Overlay> currentOverlays = mapView.getOverlays();
if(!currentOverlays.isEmpty())
{
for(Overlay o : currentOverlays)
{
// You need to a typecast here I think
o.setDrawable(null);
}
currentOverlays.clear();
mapView.postInvalidate();
}