MPIMapProviderBaseMapCache
[INTERNAL]
Caches the map provider's own base-map tiles for offline use, so that a map can render without a network connection. This covers the base map underneath MapsIndoors — the MapsIndoors floor tiles and solution data are cached separately, by MPDataSetCacheManager.
Implemented once per map provider and registered by the host app. An implementation is deliberately independent of MPIMapProvider, MPIMapConfig and any map view: it can be constructed and used before a map exists, and it stays usable after one is destroyed. Not every map provider can do this — see isBaseMapCachingSupported.
Regions
A region is identified by a caller-supplied id, formatted "<dataSetId>_<venueId>". The format is a contract, not an implementation detail: the id is generated with no normalisation, lowercasing or hashing, and the "<dataSetId>_" prefix is used to find every region belonging to a dataset when that dataset is removed. Implementations must treat the id as opaque and store it verbatim, so that cachedRegionIds returns ids that still match that prefix.
The region's geometry and zoom range are computed by the core SDK before reaching an implementation, so that every provider caches the same area. An implementation converts the MPLatLngBounds it is given into whatever geometry its native API needs; it does not widen, shrink or recompute it.
Threading
Every method may be called from any thread and returns immediately; results arrive on the supplied listener. Listener callbacks are invoked on an arbitrary thread — implementations do not dispatch to the main thread, so callers that need a specific thread must hop themselves.