我了解HERE Android SDK的方式是,有一个MapView
带有一个后退Map
对象。应该在Map
对象上执行添加对象,设置中心,缩放等操作,这最终将反映在MapView
上。
问题:
必须在
Map
对象上执行什么线程上有任何限制?例如,是否都必须在UI线程上调用它们?另外,是否应该同步多个后续呼叫?
之所以这样问,是因为我想对地图进行多次更改(调整地图视图的大小,更改一些可见图层,更改方案,添加MapRoute并缩小到路线的边界框)。当我尝试此操作时,它有时有效,但有时却无效。有时,仅应用某些操作。例如,除了不应用缩放外,其他所有操作都有效。
我知道有些听众可以帮助我
Map.OnTransformListener
-可以用来告诉我缩放操作何时结束Map.OnSchemeChangedListener
-我可以用来了解方案更改事件何时结束从文档中我还不清楚什么是其他操作构成“转换”?其中哪些操作必须以同步方式执行?
例如,以下代码是否有望正常运行?
map.setCenter(coordinate, Animation.BOW, 18, 0f, 60f);
map.addMapObject(routeObject);
map.setVisibleLayers(layersToShow, true);
map.setScheme(Map.Scheme.NORMAL_DAY)
请注意,在以上示例中,我将在setCenter
之后甚至动画完成之前立即进行更改。这是使用API的预期方式吗?
答案 0 :(得分:1)
从哪个线程调用API没有限制。在内部,所有调用都是同步的,并且是线程安全的。
您正在寻找的是MapView#executeSynchronized API。 [link]这会将一些操作分批处理到一个屏幕重绘中。 [至少当我几年前编写该API时]
发生的事情是因为基础渲染线程开始从调用线程中绘制一些命令。这导致随后的通话失去效果。