Android: вот карта, как загрузить асинхронное изображение плитки?

В качестве плитки я использую Here-map.

Вместо этого я пытаюсь использовать собственные растровые плитки с сервера S3. Следуйте документации, есть два класса, которые поддерживают меня в этом: UrlMapRasterTileSourceBase и MapRasterTileSource.

В моем случае я попытался создать новый экземпляр MapRasterTileSource, а затем переопределить функцию getTileWithError (int x, int y, int zoomLevel), чтобы загрузить мое изображение плитки с сервера S3.

Проблема в том, что время загрузки изображения слишком велико, и пользовательский интерфейс кажется запаздывающим.

В документе есть часть:

Примечание. Убедитесь, что getTileWithError () вернется в разумные сроки. Если ваша операция занимает более длительный период времени, запустите асинхронную операцию и верните код ошибки TileResult.Error.NOT_READY во время выполнения операции.

Но я понятия не имею, как это применить. Я попытался загрузить изображение с помощью обратного вызова, но не знаю, что делать после получения результата.

Не могли бы вы помочь мне в этом, пожалуйста !?


person Lạng Hoàng    schedule 08.09.2015    source источник


Ответы (1)


Как вы загружаете растровые плитки из S3? Это синхронный HTTP-запрос, который вы вызываете из getTileWithError?

Правильный поток должен быть: -getTileWithError () // для конкретных x, y, z -выполнить выборку плитки из вашего уровня S3 асинхронно через поток или AsyncTask. -Тем временем getTileWithError () будет вызываться постоянно, и вы можете вернуть «TileResult.NOT_READY». -Когда изображение полностью загружено, затем верните изображение обратно в среду выполнения.

Если время, затраченное на getTileWithError, занимает слишком много времени, источник плитки будет автоматически отключен.

person David Leong    schedule 10.09.2015
comment
-Когда образ будет полностью загружен, верните образ обратно во время выполнения. = ›Значит, нужно кешировать результат? В настоящее время я делаю то же самое с тем, что вы предлагаете, загружая async, возвращаю NOT_READY и когда данные готовы в обратном вызове - ›сохраняю их в файл кеша, в следующий раз, когда вызовите getTileWithError () снова, я проверяю, есть ли файл кеша для эта плитка затем загрузится. Или у вас есть другое решение для возврата изображения обратно во время выполнения? - person Lạng Hoàng; 11.09.2015