Android 在Here SDK映射对象上执行操作是否有线程限制?

Android 在Here SDK映射对象上执行操作是否有线程限制?,android,here-api,Android,Here Api,我对HERE Android SDK的理解是,有一个MapView有一个支持Map对象。应在Map对象上执行添加对象、设置中心、缩放等操作,这最终会反映在MapView上 问题: 对于必须在Map对象上执行的操作的线程是否有任何限制?例如,它们都必须在UI线程上调用吗?此外,是否应同步多个后续调用 我这样做是因为我想在地图中进行多次更改(调整地图视图的大小、更改一些可见图层、更改方案、添加地图管线并缩小到管线的边界框)。当我尝试这个时,它有时有效,但有时无效。有时,仅应用部分操作。例如,除未应用

我对HERE Android SDK的理解是,有一个
MapView
有一个支持
Map
对象。应在
Map
对象上执行添加对象、设置中心、缩放等操作,这最终会反映在
MapView

问题:

对于必须在
Map
对象上执行的操作的线程是否有任何限制?例如,它们都必须在UI线程上调用吗?此外,是否应同步多个后续调用

我这样做是因为我想在地图中进行多次更改(调整地图视图的大小、更改一些可见图层、更改方案、添加地图管线并缩小到管线的边界框)。当我尝试这个时,它有时有效,但有时无效。有时,仅应用部分操作。例如,除未应用缩放外,其他所有操作均有效

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

  • 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的预期方式吗?

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

    您需要的是MapView#executeSynchronized API。这将在一个屏幕上重新绘制一些操作。[至少在几年前我写API的时候]


    发生这种情况是因为底层渲染线程开始从调用线程绘制一些命令。这会导致后续调用失效。

    感谢您提供有关
    executeSynchronized
    的提示。还是没用。我重新安排了地图操作,最后(在所有其他操作之后)执行
    setCenter
    。但有时它并没有完成操作。它设置中心,但不放大到我指定的值。由于
    setCenter
    是一个原子调用,我看不出还有什么问题。我还尝试了
    zoomTo
    ,但没有效果。我在一个位置列表中滚动,每次选择其中一个位置时,我都会执行一系列地图操作。当我快速滚动时,我看到了问题(之前的操作尚未完成)。有什么建议吗?哦,也因为你是动画。弓。这将取消以前的所有操作。根据渲染线程发生的情况,您将看到不同的结果。一种方法是先设置属性,然后启动延迟设置中心~100ms。一个渲染帧应该是你的技巧真的很有见地。谢谢但我仍然看到了问题(还尝试添加100毫秒延迟)。就像你说的,如果我使用
    动画.NONE
    ,那么问题就消失了。使用
    LINEAR
    BOW
    约30%的时间,缩放操作仅部分完成。“渲染线程”是什么意思?有没有可能以某种方式调试或分析它?SDK的设计非常类似于标准的渲染引擎。应用程序主线程拦截用户事件并将一组操作委托给后台线程。后台线程承载绘制地图的opengl上下文。对于外部开发人员来说,没有一种简单的方法可以进一步打开该框,因为所有代码都是专有的。执行动画的另一种方法是制作自己的贝塞尔曲线动画。计算关键点并逐帧手动移动贴图以制作自定义动画。