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

9 回复

【问题定位】

  • 在高德地图创建的回调和销毁的地方新增日志,打印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


您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

你好。

从操作描述来看,貌似是内存泄漏。是不是该界面有些操作注册之后,界面销毁没有清理?

HarmonyOS的分布式技术让我实现了跨设备的无缝协作,工作效率翻倍。

高德地图的官方文档写的比较简单,没有提到有关生命周期的情况,我就是完全按照教程写的代码。

官方文档一般是这样。只是展示实现的code。很少有全流程处理的。建议你贴一下复现问题的最小单元代码。

最好提供一下能复现的demo代码

姓名

张三

职位

软件工程师

手机

12345678901

邮箱

zhangsan@example.com

兴趣爱好

  • 篮球
  • 阅读
  • 旅游

在HarmonyOS鸿蒙Next中接入高德地图时,反复进入地图页面导致崩溃,可能由以下原因引起:

  1. 内存泄漏:未正确释放地图资源,导致内存占用过高。确保在页面退出时调用onDestroy()方法释放地图实例。

  2. 重复初始化:每次进入页面都重新初始化地图,导致资源冲突。建议在页面生命周期中管理地图实例,避免重复创建。

  3. 线程问题:地图操作未在主线程执行。确保地图相关操作在UI线程中进行。

  4. SDK版本兼容性:检查高德地图SDK与HarmonyOS版本的兼容性,确保使用最新版本。

建议通过日志分析崩溃原因,优化资源管理和生命周期控制。

回到顶部