Существуют ли какие-либо ограничения потока на выполнение операций над объектом Here SDK Map? - PullRequest
1 голос
/ 07 марта 2019

Я понимаю, что HERE Android SDK состоит в том, что есть MapView, у которого есть поддерживающий Map объект.Добавление объектов, установка центра, масштабирование и т. Д. Должны выполняться на объекте Map, и это в конечном итоге отражается на MapView.

Вопрос:

Есть ли какие-либо ограничения на то, в каком потоке должны выполняться операции над объектом Map?Например, все ли они должны вызываться в потоке пользовательского интерфейса?Кроме того, следует ли синхронизировать несколько последующих вызовов?

Я спрашиваю об этом, потому что хочу внести несколько изменений в карту (изменить размер карты, изменить некоторые видимые слои, изменить схему, добавить 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 Ответ

1 голос
/ 10 марта 2019

Нет ограничений на то, из какого потока вы вызываете API.Внутренне все вызовы синхронизированы и поточно-ориентированы.

Что вам нужно, так это API-интерфейс MapView # executeSynchronized. [ссылка] Это позволит объединить несколько операций в одну перерисовку экрана.[По крайней мере, когда я писал этот API несколько лет назад]

То, что вы испытываете, происходит, потому что основной поток рендеринга начал рисовать некоторые команды из вызывающего потока.Это привело к тому, что последующие звонки потеряли силу.

...