Huawei Map Kit首次启动自定义地图样式不生效重启后正常问题求助
问题排查与解决思路
- 问题根因:你使用的
com.huawei.hms:maps:5.2.0.300版本存在已知的首次启动样式加载时序问题:onMapReady回调仅代表地图实例初始化完成,不代表地图渲染层、资源加载全部就绪。首次冷启动时自定义样式的加载与地图基础资源初始化并行执行,样式设置操作早于渲染层就绪就会失效;第二次启动时地图资源已有本地缓存,时序差消失,样式就可以正常加载。 - 修复方案1:调整样式设置的触发时机
不要直接在onMapReady中调用样式设置,改为监听地图加载完成回调后再执行,修改代码如下:
override fun onMapReady(map: HuaweiMap) { Log.d(TAG, "onMapReady: ") hMap = map hMap?.uiSettings?.isMyLocationButtonEnabled = false hMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(48.893478, 2.334595), 10f)) // 监听地图加载完成后再设置样式 hMap?.setOnMapLoadedListener { setSimpleStyle() } } fun setSimpleStyle() { val styleOptions = MapStyleOptions.loadRawResourceStyle(this, R.raw.mapstyle_simple) // 增加加载失败判断和重试逻辑 if (styleOptions == null) { Log.e(TAG, "样式资源加载失败,延迟重试") hMap?.postDelayed({ setSimpleStyle() }, 150) return } hMap?.setMapStyle(styleOptions) }
- 修复方案2:升级Map Kit版本
5.2.0.300属于较老的维护版本,官方在6.0+以上的稳定版已经修复了该时序问题,你可以直接升级到com.huawei.hms:maps:6.3.0.302及以上的稳定版本,无需额外修改业务逻辑即可解决该问题。 - 修复方案3:提前预加载地图资源
可以在应用启动的Application.onCreate阶段提前调用MapsInitializer.initialize(context)预加载地图基础资源,减少进入地图页面后的资源加载时序差,也可以避免首次加载样式失效的问题。
内容的提问来源于stack exchange,提问作者Matrix
相关产品推荐
相关产品推荐

