对 Here SDK Map 对象执行操作是否有线程限制?
Are there any thread restrictions on performing operations on the Here SDK Map object?
我对 HERE Android SDK 的理解是,有一个 MapView
具有支持 Map
对象。添加对象、设置中心、缩放等应在 Map
对象上执行,这最终反映在 MapView
.
上
问题:
Are there any restrictions on what thread the operations on the Map
object must be performed? For example, must they all be called on the UI thread? Also, should multiple subsequent calls be synchronized?
我问这个是因为我想在地图中进行多项更改(调整地图视图的大小、更改一些可见图层、更改方案、添加 MapRoute 并缩小到路线的边界框)。当我尝试这个时,它有时有效但有时无效。有时,仅应用某些操作。例如,除了不应用缩放外,一切正常。
我知道有一些听众可以帮助我:
Map.OnTransformListener
- 我可以用它来通知我缩放操作何时结束
Map.OnSchemeChangedListener
- 我可以用它来了解方案更改事件何时结束
我从文档中不清楚的是什么其他操作构成 "transform"?其中哪些操作必须以同步方式执行?
例如,以下代码的行为是否正确?
map.setCenter(coordinate, Animation.BOW, 18, 0f, 60f);
map.addMapObject(routeObject);
map.setVisibleLayers(layersToShow, true);
map.setScheme(Map.Scheme.NORMAL_DAY)
请注意,在上面的示例中,我在 setCenter
之后立即进行更改,甚至在动画完成之前。这是使用 API 的预期方式吗?
对于从哪个线程调用 API 没有限制。在内部,所有调用都是同步和线程安全的。
您正在寻找的是 MapView#executeSynchronized API. [link] 这会将一些操作批量合并到一个屏幕重绘中。 [至少我几年前API写的时候]
您遇到的问题是因为底层渲染线程开始从调用线程绘制一些命令。这导致后续调用失效。
我对 HERE Android SDK 的理解是,有一个 MapView
具有支持 Map
对象。添加对象、设置中心、缩放等应在 Map
对象上执行,这最终反映在 MapView
.
问题:
Are there any restrictions on what thread the operations on the
Map
object must be performed? For example, must they all be called on the UI thread? Also, should multiple subsequent calls be synchronized?
我问这个是因为我想在地图中进行多项更改(调整地图视图的大小、更改一些可见图层、更改方案、添加 MapRoute 并缩小到路线的边界框)。当我尝试这个时,它有时有效但有时无效。有时,仅应用某些操作。例如,除了不应用缩放外,一切正常。
我知道有一些听众可以帮助我:
Map.OnTransformListener
- 我可以用它来通知我缩放操作何时结束Map.OnSchemeChangedListener
- 我可以用它来了解方案更改事件何时结束
我从文档中不清楚的是什么其他操作构成 "transform"?其中哪些操作必须以同步方式执行?
例如,以下代码的行为是否正确?
map.setCenter(coordinate, Animation.BOW, 18, 0f, 60f);
map.addMapObject(routeObject);
map.setVisibleLayers(layersToShow, true);
map.setScheme(Map.Scheme.NORMAL_DAY)
请注意,在上面的示例中,我在 setCenter
之后立即进行更改,甚至在动画完成之前。这是使用 API 的预期方式吗?
对于从哪个线程调用 API 没有限制。在内部,所有调用都是同步和线程安全的。
您正在寻找的是 MapView#executeSynchronized API. [link] 这会将一些操作批量合并到一个屏幕重绘中。 [至少我几年前API写的时候]
您遇到的问题是因为底层渲染线程开始从调用线程绘制一些命令。这导致后续调用失效。