HarmonyOS鸿蒙Next中接入高德地图,反复进入地图页面奔溃
HarmonyOS鸿蒙Next中接入高德地图,反复进入地图页面奔溃 接入高德地图,反复进入地图页面奔溃,报错很多,以下是部分错误信息,看起来是底层的错误,如何分析这种错误🤣
Process life time:43s
Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x00000000000000ea probably caused by NULL pointer dereference
Fault thread info:
Tid:10874, Name:nyu.DreamSeeker
#00 pc 0000000000070ec8 /system/lib64/chipset-pub-sdk/libsurface.z.so(OHOS::ProducerSurface::CancelBuffer(OHOS::sptr<OHOS::SurfaceBuffer>&)+76)(e7883dd3f339e37870fdd57d13b5a16c)
#01 pc 0000000000069a70 /system/lib64/chipset-pub-sdk/libsurface.z.so(NativeWindowCancelBuffer+48)(e7883dd3f339e37870fdd57d13b5a16c)
#02 pc 000000000016c4f0 /system/lib64/libdgles.z.so(d_eglMakeCurrent_special(void*, void*, void*, void*, void*)+788)(37e3529ec6c59786722b186a9643b455)
#03 pc 0000000000158cc0 /system/lib64/libdgles.z.so(eglMakeCurrent+500)(37e3529ec6c59786722b186a9643b455)
#04 pc 0000000000038720 /system/lib64/libEGL.so(OHOS::EglWrapperDisplay::InternalMakeCurrent(OHOS::EglWrapperSurface*, OHOS::EglWrapperSurface*, OHOS::EglWrapperContext*, bool, OHOS::EglWrapperContext*)+100)(b7d008cbab5d991a8b2eb8a7b9b69232)
#05 pc 00000000000389dc /system/lib64/libEGL.so(OHOS::EglWrapperDisplay::MakeCurrent(void*, void*, void*)+336)(b7d008cbab5d991a8b2eb8a7b9b69232)
#06 pc 000000000002d9c0 /system/lib64/libEGL.so(eglMakeCurrent+264)(b7d008cbab5d991a8b2eb8a7b9b69232)
#07 pc 0000000000af2d34 /data/storage/el1/bundle/libs/arm64/libAMapOpenMap.so(3a698c856a0659f81467e58715c695e7e3d7d7ff)
#08 pc 0000000000afdaa4 /data/storage/el1/bundle/libs/arm64/libAMapOpenMap.so(3a698c856a0659f81467e58715c695e7e3d7d7ff)
#09 pc 000000000003a918 /system/lib64/platformsdk/libace_napi.z.so(panda::JSValueRef ArkNativeFunctionCallBack<true>(panda::JsiRuntimeCallInfo*)+216)(5b85cc643053edcad81ef2661f9a00b7)
#10 pc 0000000000404b2c /system/lib64/module/arkcompiler/stub.an(RTStub_PushCallArgsAndDispatchNative+40)
#11 at c21 (@amap/amap_lbs_map3d|@amap/amap_lbs_map3d|2.2.0|src/main/ets/com/amap/mapcore/GLMapEngine.ts:518:1)
#12 at u13 (@amap/amap_lbs_map3d|@amap/amap_lbs_map3d|2.2.0|src/main/ets/com/amap/mapcore/AMapNativeDelegate.ts:666:1)
#13 at anonymous (@amap/amap_lbs_map3d|@amap/amap_lbs_map3d|2.2.0|src/main/ets/com/amap/mapcore/AMapGLMapRender.ts:34:1)
#14 pc 00000000003afa68 /system/lib64/platformsdk/libark_jsruntime.so(3b26ca8df0ba0a23aa57bd53dab828e5)
#15 pc 00000000005dea88 /system/lib64/platformsdk/libark_jsruntime.so(panda::FunctionRef::CallForNapi(panda::ecmascript::EcmaVM const*, panda::JSValueRef*, panda::JSValueRef* const*, int)+1396)(3b26ca8df0ba0a23aa57bd53dab828e5)
#16 pc 00000000000563ec /system/lib64/platformsdk/libace_napi.z.so(napi_call_function+296)(5b85cc643053edcad81ef2661f9a00b7)
#17 pc 000000000000806c /system/lib64/platformsdk/libtimer.z.so(OHOS::JsSysModule::Timer::TimerCallback(uv_timer_s*)+268)(2e07b4cd30a17b1540b91463c4d6c1a5)
#18 pc 0000000000012a14 /system/lib64/platformsdk/libuv.so(978d608dd33a4e757395120d76498090)
#19 pc 0000000000015f5c /system/lib64/platformsdk/libuv.so(uv_run+268)(978d608dd33a4e757395120d76498090)
#20 pc 000000000007946c /system/lib64/platformsdk/libruntime.z.so(OHOS::AbilityRuntime::OHOSLoopHandler::OnTriggered()+112)(75f28dcb7f7344d037a6c3a2321ac494)
#21 pc 00000000000799ec /system/lib64/platformsdk/libruntime.z.so(75f28dcb7f7344d037a6c3a2321ac494)
#22 pc 0000000000016ad4 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventHandler::DistributeEvent(std::__h::unique_ptr<OHOS::AppExecFwk::InnerEvent, void ()(OHOS::AppExecFwk::InnerEvent)> const&)+1068)(37acbf7bda7ac4361277e031729714be)
#23 pc 0000000000027e5c /system/lib64/chipset-pub-sdk/libeventhandler.z.so(37acbf7bda7ac4361277e031729714be)
#24 pc 0000000000027714 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(37acbf7bda7ac4361277e031729714be)
#25 pc 0000000000025678 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventRunner::Run()+456)(37acbf7bda7ac4361277e031729714be)
#26 pc 00000000000afb18 /system/lib64/platformsdk/libappkit_native.z.so(OHOS::AppExecFwk::MainThread::Start()+364)(719f9fcba8006399e14a59bdfa8f1664)
#27 pc 0000000000004a54 /system/lib64/appspawn/appspawn/libappspawn_ace.z.so(02bdf176e1dad78d068324f3aac78551)
#28 pc 000000000000b9f4 /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
#29 pc 0000000000014538 /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
#30 pc 0000000000012488 /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
#31 pc 0000000000016dbc /system/lib64/chipset-pub-sdk/libbegetutil.z.so(1430204e4f31cd011ec604ba77131483)
#32 pc 0000000000016890 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(1430204e4f31cd011ec604ba77131483)
#33 pc 0000000000013f70 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(1430204e4f31cd011ec604ba77131483)
#34 pc 0000000000013b30 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(1430204e4f31cd011ec604ba77131483)
#35 pc 00000000000106fc /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
#36 pc 000000000000e4c4 /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
#37 pc 00000000000a0cdc /system/lib/ld-musl-aarch64.so.1(fcf57c313493609e8c78a5f07477c358)
#38 pc 000000000000b7e4 /system/bin/appspawn(93ed55b8b990e00a03f763ba9add0f82)
更多关于HarmonyOS鸿蒙Next中接入高德地图,反复进入地图页面奔溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
【问题定位】
-
在高德地图创建的回调和销毁的地方新增日志,打印mapview对象,检查mapview对象是否被成功销毁。
-
根据日志打印发现,创建地图的日志次数与销毁地图的日志次数是否一样,如果不一样,说明存在mapview对象未被销毁。
【修改建议】
给当前页面对象赋值前判断是否已经存在mapview对象,若已经存在,则直接返回,避免当前页面的mapview对象被覆盖。
private mapViewCreateCallback: MapViewCreateCallback = (mapview?: MapView, mapViewName?: string) => {
if (!mapview || this.mapView) {
return;
}
if (mapViewName != Constants.MAP_SHOW_FUNC) {
return;
}
this.mapView = mapview;
this.mapView.onCreate();
this.mapView.getMapAsync((map) => {
this.aMap = map;
})
}
更多关于HarmonyOS鸿蒙Next中接入高德地图,反复进入地图页面奔溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:
-
补全复现代码,让参与用户更快速复现您的问题;
-
更多提问技巧,请参考:【Tips】如何提个好问题
你好。
从操作描述来看,貌似是内存泄漏。是不是该界面有些操作注册之后,界面销毁没有清理?
高德地图的官方文档写的比较简单,没有提到有关生命周期的情况,我就是完全按照教程写的代码。
官方文档一般是这样。只是展示实现的code。很少有全流程处理的。建议你贴一下复现问题的最小单元代码。
最好提供一下能复现的demo代码
在HarmonyOS鸿蒙Next中接入高德地图时,反复进入地图页面导致崩溃,可能由以下原因引起:
-
内存泄漏:未正确释放地图资源,导致内存占用过高。确保在页面退出时调用
onDestroy()
方法释放地图实例。 -
重复初始化:每次进入页面都重新初始化地图,导致资源冲突。建议在页面生命周期中管理地图实例,避免重复创建。
-
线程问题:地图操作未在主线程执行。确保地图相关操作在UI线程中进行。
-
SDK版本兼容性:检查高德地图SDK与HarmonyOS版本的兼容性,确保使用最新版本。
建议通过日志分析崩溃原因,优化资源管理和生命周期控制。