我正在使用此处的Android SDK API。 我有两个地图视图实例 - 一个具有mapFragment的普通地图(map_1),另一个具有在android服务(map_2)内运行的OffscreenRenderer。 此处地图SDK OffscreenRenderer添加地图路线故障
希望这个方案能提供一些解释。 当活动用户创建路线将其发送给所有MyApplication实例,然后以有限的服务,其中:启动
offscreenMap.addMapObject(route);
在这之后运行完美。但是,当Activity被破坏并重新创建时,在相同的用例中,服务中的相同方法会被调用(我会看到我的路由到达Service实例的日志),但是不会立即更新offscreenMap。在地图实际获得新路线更新之前,可能会发生一些漫长的任意时间。
更有趣的是,如果用户大量放大活动地图实例(或旋转地图),map_2会立即更新新路线。所以我的问题是 - 这是一个这里的错误还是我的滥用?我能做些什么来防止这种情况发生?
同样,它不是android销毁我的服务或丢失与有界服务的连接的问题,这很好。我可以看到服务方法被调用。
希望有任何建议。
更新时间: 对于解决(感谢大卫·施)正常情况下的问题:告诉地图实例,它需要进行更新,setZoomLevel(getZoomLevel())方法的帮助。 但是!如果在相同情况下在Roadview导航模式下运行的NavigationManager - 地图仍然不会更新。
澄清map2实例的一些代码。当服务启动:
positionManager = PositioningManager.getInstance();
positionManager.start(PositioningManager.LocationMethod.GPS_NETWORK);
navMngr = NavigationManager.getInstance();
navMngr.setMap(map2);
navMngr.setMapUpdateMode(NavigationManager.MapUpdateMode.ROADVIEW);
navMngr.startTracking();
当路线添加(或改变):
public void addRoute(Route route) {
Log.d(TAG, "addRoute");
MapRoute mainRoute = new MapRoute (route);
if (currentRoute != null) {
map2.removeMapObject(currentRoute);
}
currentRoute = mainRoute;
map2.addMapObject(currentRoute);
map2.setZoomLevel(map2.getZoomLevel());
//navMngr.stop();
navMngr.startNavigation(currentRoute.getRoute());
}
虽然第一次创建活动和存活 - 此代码的工作。但是当它被破坏并重新创建时,map2只会在map1(在活动时)被用户缩小后更新。我用NavManager做错了什么?
更新2: 得到它。我使用navManager的map1和map2。这是一个错误。它可能是一个singletone,应该只用于一个地图实例。当我重新启动其捕获导航管理器到其自己的地图的活动,然后map2刷新只是偶然。所以我现在删除了map1上的导航管理器及其工作。此外它相当令人沮丧,我无法使用导航经理都映射=(
您是否在两个地图之间使用相同的MapRoute对象?路由对象,因为你有两个地图 –
是的,我选中了,我使用了相同的Route对象,但是为两个地图实例单独创建了两个不同的MapRoute对象。仅在map_1上进行了一些操作后,仍然在map_2上绘制MapRoute。还是我需要使用两个Route对象?我猜不是,因为它可能不应该有任何连接到地图视图..任何其他建议?) –
这应该是好的。系统缺失的内容可能是重新绘制地图的一个尝试。尝试像map.setZoomLevel(map.getZoomLevel());这将是一个无操作,但会触发重绘。如果这是有效的,那么这意味着该系统认为没有任何变化,这是部分正确的。 –