uni-app 某些机型使用高德地图闪退
uni-app 某些机型使用高德地图闪退
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 1909 | HBuilderX |
bug描述:
app使用地图部分机型有闪退的现象, 请问是什么原因导致的, 查看崩溃日志,
2021/06/23 11:37:49 [crash] imei:866621037739477 md:vivo X9s p:a os:27 net:6 vb:1.9.9.80859 mc: appid:UNIFDE3062 appcount:1 wvcount:5 pn:uni.UNIFDE3062 mem:21132kb etype:1 eurl: carsh_info:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.refreshDrawableState()' on a null object reference
at io.dcloud.js.map.amap.adapter.DHMapFrameItem$MapHandler.handleMessage(DHMapFrameItem.java:611)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:817)
2021/06/23 14:31:48 [crash] imei:B05A0A1D650FB0FA45B87C0F0824C9C5 md:WLZ-AN00 p:a os:29 net:3 vb:1.9.9.80859 mc: appid:UNIFDE3062 appcount:1 wvcount:4 pn:uni.UNIFDE3062 mem:57152kb etype:1 eurl: carsh_info:java.lang.NullPointerException: Attempt to invoke virtual method 'void io.dcloud.js.map.amap.adapter.DHMapView.refreshDrawableState()' on a null object reference
at io.dcloud.js.map.amap.adapter.DHMapFrameItem$MapHandler.handleMessage(DHMapFrameItem.java:611)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8393)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
2021/06/23 17:03:57 [crash] imei:17FE1A532A0BC650A570DD0D0F139D4B md:HUAWEI CAZ-AL10 p:a os:24 net:6 vb:1.9.9.80859 mc: appid:UNIFDE3062 appcount:1 wvcount:2 pn:uni.UNIFDE3062 mem:158184kb etype:1 eurl: carsh_info:java.lang.NullPointerException: Attempt to invoke virtual method 'void io.dcloud.js.map.amap.adapter.DHMapView.refreshDrawableState()' on a null object reference
at io.dcloud.js.map.amap.adapter.DHMapFrameItem$MapHandler.handleMessage(DHMapFrameItem.java:611)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6517)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
2021/06/23 17:17:30 [crash] imei:17FE1A532A0BC650A570DD0D0F139D4B md:HUAWEI CAZ-AL10 p:a os:24 net:6 vb:1.9.9.80859 mc: appid:UNIFDE3062 appcount:1 wvcount:5 pn:uni.UNIFDE3062 mem:158980kb etype:1 eurl: carsh_info:java.lang.NullPointerException: Attempt to invoke virtual method 'void io.dcloud.js.map.amap.adapter.DHMapView.refreshDrawableState()' on a null object reference
at io.dcloud.js.map.amap.adapter.DHMapFrameItem$MapHandler.handleMessage(DHMapFrameItem.java:611)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6517)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
示例代码:
使用代码如下:
view.detail
view.card-box
map(style="width: 100%; height: 500rpx;", :latitude="latitude", :longitude="longitude", :markers="covers", :polyline="polyline")
view.re-locate.u-center-center(v-if="!isSignOut && workSheetType !== 5", @click="toLocate")
//image(src="../static/userLocale.png", mode="aspectFit")
view.address {{address}}
view.edit-locale 修改定位
view.clock-in
view.clock(v-if="!latitude", @click="getLocation")
view.time
text 重新定位
view.clock(v-else, @click="getImg")
view.time
text {{hour}}
text(:style="{opacity: clock ? 1 : 0}") :
text {{minutes}}
view {{isSignOut ? '拍照签退' : '拍照签到'}}
更多关于uni-app 某些机型使用高德地图闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 某些机型使用高德地图闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据崩溃日志分析,这是一个高德地图SDK在特定机型上的空指针异常问题。崩溃发生在DHMapFrameItem.java第611行,具体表现为调用refreshDrawableState()方法时对象为null。
主要原因是地图组件在生命周期管理上存在缺陷,当页面快速切换或地图组件尚未完全初始化时,系统尝试更新地图视图状态但地图对象已被销毁或未正确初始化。
解决方案:
- 升级HBuilderX到最新版本,确保使用最新的高德地图SDK
- 检查地图组件的生命周期管理,确保在页面隐藏或销毁时正确释放地图资源
- 在地图组件外围添加条件渲染,确保地图数据准备完成后再渲染组件
- 避免在页面快速切换时频繁创建和销毁地图实例
建议修改代码结构,在地图组件上添加v-if条件控制:
<map v-if="mapReady"
style="width: 100%; height: 500rpx;"
:latitude="latitude"
:longitude="longitude"
:markers="covers"
:polyline="polyline">
</map>

