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。

主要原因是地图组件在生命周期管理上存在缺陷,当页面快速切换或地图组件尚未完全初始化时,系统尝试更新地图视图状态但地图对象已被销毁或未正确初始化。

解决方案:

  1. 升级HBuilderX到最新版本,确保使用最新的高德地图SDK
  2. 检查地图组件的生命周期管理,确保在页面隐藏或销毁时正确释放地图资源
  3. 在地图组件外围添加条件渲染,确保地图数据准备完成后再渲染组件
  4. 避免在页面快速切换时频繁创建和销毁地图实例

建议修改代码结构,在地图组件上添加v-if条件控制:

<map v-if="mapReady" 
     style="width: 100%; height: 500rpx;" 
     :latitude="latitude" 
     :longitude="longitude" 
     :markers="covers" 
     :polyline="polyline">
</map>
回到顶部