在Here SDK Map对象上执行操作是否有任何线程限制?

时间:2019-03-07 13:52:40

标签: android here-api

我了解HERE Android SDK的方式是,有一个MapView带有一个后退Map对象。应该在Map对象上执行添加对象,设置中心,缩放等操作,这最终将反映在MapView上。

问题:

  

必须在Map对象上执行什么线程上有任何限制?例如,是否都必须在UI线程上调用它们?另外,是否应该同步多个后续呼叫?

之所以这样问,是因为我想对地图进行多次更改(调整地图视图的大小,更改一些可见图层,更改方案,添加MapRoute并缩小到路线的边界框)。当我尝试此操作时,它有时有效,但有时却无效。有时,仅应用某些操作。例如,除了不应用缩放外,其他所有操作都有效。

我知道有些听众可以帮助我

  1. Map.OnTransformListener-可以用来告诉我缩放操作何时结束
  2. 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​​的预期方式吗?

1 个答案:

答案 0 :(得分:1)

从哪个线程调用API没有限制。在内部,所有调用都是同步的,并且是线程安全的。

您正在寻找的是MapView#executeSynchronized API。 [link]这会将一些操作分批处理到一个屏幕重绘中。 [至少当我几年前编写该API时]

发生的事情是因为基础渲染线程开始从调用线程中绘制一些命令。这导致随后的通话失去效果。