Сокращение времени загрузки автономного слоя mbtiles в Mapbox Android SDK

У меня есть базовое приложение для Android, которое загружает и отображает локальный файл .mbtiles с помощью Mapbox SDK (версия 0.7.3), но при первой загрузке приложения происходит значительная задержка (что приводит к черному экрану) во время загрузки плиток. Похоже, он загружает ВСЕ плитки (а не только видимые плитки при запуске). Есть ли способ изменить это. Размер файла .mbtiles составляет примерно 257 МБ, и после запуска приложению требуется примерно 40 секунд, чтобы отобразить карту.

Любая помощь будет принята с благодарностью.

Здесь загружаются плитки:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.findViewById(R.id.mapview);

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setZoom(9);
    mapView.setMinZoomLevel(8);
    mapView.setMaxZoomLevel(15);
    mapView.setCenter(new LatLng(55.676111, 12.568333));
    mapView.setTileSource(new MBTilesLayer(this, "DK_underlay_1_0_4.mbtiles"));

}

и вот журналы, показывающие ~ 40-секундный промежуток при загрузке приложения:

04-29 11:07:54.173  23590-23590/com.example.stugrey.testapp D/MapboxMapView﹕ centerLatLng is not specified in XML.
04-29 11:07:54.173  23590-23590/com.example.stugrey.testapp D/Mapbox MapView﹕ zoomLevel is not specified in XML.
04-29 11:08:34.236  23590-23590/com.example.stugrey.testapp D/AppUtils﹕ Device density is 320, and result of @2x check is true
04-29 11:08:34.236  23590-23590/com.example.stugrey.testapp D/MapTileDownloader﹕ Going to use @2x tiles? 'true'
04-29 11:08:34.308  23590-23590/com.example.stugrey.testapp I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018_msm8226_LNX.LA.3.5.1_RB1__release_AU ()
OpenGL ES Shader Compiler Version: E031.24.00.08
Build Date: 03/07/14 Fri
Local Branch:
Remote Branch: quic/LNX.LA.3.5.1_RB1.1
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018 + f2fd134 +  NOTHING

person StuGrey    schedule 29.04.2015    source источник


Ответы (1)


Медленная часть вашего кода — это создание файла MBTilesLayer. Все остальное должно быть гладко. Итак, одна вещь, которую вы можете сделать, это переместить медленный код new MBTilesLayer(this, "DK_underlay_1_0_4.mbtiles") в код AsyncTask, чтобы ваш пользовательский интерфейс не блокировался во время медленной загрузки. Это не сокращает время загрузки, но обеспечивает неблокируемый пользовательский интерфейс.

Таким образом, вы можете показать индикатор выполнения (или заполнитель) вместо черного экрана.

person Stefan Arn    schedule 21.12.2015