Я работаю над картой для моего приложения общественного транспорта.Я использую SurfaceView, это карта на основе плиток, кроме основного потока есть два потока - поток рисования и поток загрузки растровых изображений.
Растровые изображения - это 256x256 PNG-файлов, хранящихся на SD-карте, я кеширую загруженные растровые изображенияемкость кеша составляет 64 битмапа.Существуют различные наборы растровых изображений для каждого уровня масштабирования, моя карта имеет 4 уровня масштабирования, каждый следующий уровень в 2 раза больше.
К сожалению, прокрутка и масштабирование пинч не работают на Nexus One, FPS составляет 15 - 20Когда никакие плитки не загружаются, FPS равен 35 - 40. Если я понижаю приоритет потока загрузки растрового изображения, он становится полностью плавным, но я часто вижу на карте еще не загруженные (белые) плитки - что еще хуже, чем негладкость.
Так что я мог сделать?Пока у меня есть 2 идеи:
- Попробуйте OpenGL, но я не хочу тратить на это время, а потом узнаю, что мой FPS только увеличен на 3. Также я хочу показать всплывающие окна (чтопрокрутка с картой) после того, как пользователь нажимает на маркеры карты, что я не знаю, как это сделать в GLSurfaceView.
- Устанавливать низкий приоритет для потока загрузки растровых изображений только тогда, когда пользователь касается экрана или во время продолжающейся анимации.Я попробовал это, но по неизвестной причине это, казалось, даже усугубило проблему, касаясь / не касаясь экрана, не имело никакого эффекта.Если бы это была какая-то ошибка, которую я могу исправить, есть еще одна проблема.Если я использую кинетическую прокрутку для быстрого перемещения карты, я увижу много не кэшированных растровых изображений.