Проблемы с производительностью ItemizedOverlay.draw()

#android #android-mapview #itemizedoverlay

#Android #android-mapview #itemizedoverlay

Вопрос:

У меня есть класс:

 public class WaypointOverlay extends ItemizedOverlay<OverlayItem>
  

Это переопределяет draw() метод ItemizedOverlay .
В моей деятельности у меня есть карта со многими элементами наложения, а также список. Я заметил из выходных данных traceviewer и logcat, что MapView.onDraw() вызывалось много раз, даже когда карта оставалась нетронутой. Это привело к тому, что список и карта действительно перестали отвечать (когда мой WaypointOverlay класс просто возвращается из этих onDraw вызовов, все работает хорошо)

Как я могу сделать так, чтобы onDraw вызовы выполнялись реже — в идеале только при выполнении MapView изменений? Я попытался, в onDraw , проверить, имеет ли MapView тот же диапазон широты / lon, что и в последнем onDraw вызове, и рисовать, только если они разные. Это приводило к тому, что OverlayItems отображалось только при панорамировании или масштабировании карты.

Есть идеи по повышению производительности?

Комментарии:

1. Похоже, что выполняется множество вызовов «invalidate ()». Ваш код выполняет этот вызов?

2. Я не делаю вызовов MapView.invalidate().

Ответ №1:

Я думаю, что, возможно, решил эту проблему (по крайней мере, для моего случая). В моем приложении пользователь может отойти от карты, а затем вернуться к ней, выполняя одно и то же действие. Каждый раз, когда пользователь возвращался к карте, я повторно добавлял все созданные мной наложения. Это означало, что на карте было слишком много наложений — я не мог их видеть, потому что они перекрывались. Вызов MapView.getOverlays().clear() значительно улучшил работу карты и списка.