HarmonyOS 鸿蒙Next 不同HAP中的UIAbility跳转后,原始HAP中的页面会失效
HarmonyOS 鸿蒙Next 不同HAP中的UIAbility跳转后,原始HAP中的页面会失效
情况说明
在测试功能分布在同一个App下不同的Feature的HAP来开发时遇到的问题;参考这里 这个文档,发现在entryAbility中的router到本HAP的页面是好的,然后使用startAbility或者startAbilityForResult打开其他HAP的UIAbility后,原HAP中的router就会有问题,效果如动画:
烦请哪个大神能解答下:
- 造成这个问题的原因;
- 不同HAP调用startAbility后,是否有类似上下文之类的东西,能不能详细说明下;
环境说明
- HarmonyOS 3.1
- 模拟器测试
- 代码仓库地址:https://gitee.com/Nity/router-demo
错误日志
05-09 11:17:27.511 10717-277/com.example.routerdemo E 03F00/ArkCompiler: [ecmascript] Cannot execute ark file 'pages/SecondPage.abc' with entry '_GLOBAL::func_main_0'
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: [jsi_base_utils.cpp(ReportJsErrorEvent)-(0)] summaryBody:
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: Lifetime: 0.000000s
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: Js-Engine: ark
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: page: pages/SecondPage.js
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: Error message: cannot find record 'com.example.routerdemo/OtherModule/ets/pages/SecondPage', please check the request path.
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: Stacktrace:
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: =====================Backtrace========================
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 1: /system/lib64/libark_jsruntime.so(+2a6ecf)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 2: /system/lib64/libark_jsruntime.so(+19d8fd)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 3: /system/lib64/libark_jsruntime.so(+410e64)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 4: /system/lib64/libark_jsruntime.so(+410a48)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 5: /system/lib64/libark_jsruntime.so(+34bce0)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 6: /system/lib64/libark_jsruntime.so(+36507f)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 7: /system/lib64/libark_jsruntime.so(+3f803d)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 8: /system/lib64/libace.z.so(+1b1c20c)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: # 9: /system/lib64/libace.z.so(+1af0a19)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #10: /system/lib64/libace.z.so(+1af0fbc)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #11: /system/lib64/libace.z.so(+bf4c7c)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #12: /system/lib64/libace.z.so(+c152ec)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #13: /system/lib64/libace.z.so(+c166bb)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #14: /system/lib64/libace.z.so(+c168fc)
05-09 11:17:27.522 10717-277/com.example.routerdemo E 03900/Ace: #15: /system/lib64/libace.z.so(+bfc28f)
05-09 11:17:27.526 10717-277/com.example.routerdemo E LOGLIMIT/: process routerdemo drop log, threshold:13050
更多关于HarmonyOS 鸿蒙Next 不同HAP中的UIAbility跳转后,原始HAP中的页面会失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可能是模拟器的系统Bug,我用DevEco Studio4.0编译,然后运行在api11的模拟器上,是没有问题的。
更多关于HarmonyOS 鸿蒙Next 不同HAP中的UIAbility跳转后,原始HAP中的页面会失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请问哪里能下载到HarmonyOS API11 ?
NEXT版本文档和模拟器需要授权才可访问,请耐心等待一下吧,
在HarmonyOS鸿蒙Next中,当不同HAP(Harmony Ability Package)中的UIAbility进行跳转时,原始HAP中的页面可能会失效。这是因为每个HAP在运行时是独立的,UIAbility之间的跳转会涉及到不同HAP的上下文切换。当UIAbility从原始HAP跳转到目标HAP时,原始HAP的页面可能会被销毁或进入后台状态,导致页面失效。
具体来说,UIAbility的跳转会触发生命周期回调,如onBackground
或onStop
,这些回调可能会导致原始HAP中的页面被暂停或销毁。此外,鸿蒙系统的资源管理机制可能会在UIAbility跳转后释放原始HAP的部分资源,以优化系统性能。
要解决这个问题,可以通过want
参数在UIAbility跳转时传递必要的数据,并在目标HAP中重新加载或恢复页面状态。另外,可以使用AbilitySlice
的onSaveInstanceState
和onRestoreInstanceState
方法来保存和恢复页面状态,确保在UIAbility跳转后页面能够正确显示。
在HarmonyOS鸿蒙Next中,不同HAP(Harmony Ability Package)之间的UIAbility跳转后,原始HAP中的页面不会自动失效。系统会保留原始HAP的上下文,以便在需要时返回。开发者可以通过startAbility
方法启动目标UIAbility,并通过terminateSelf
方法手动终止当前UIAbility。若需管理页面生命周期,建议在onBackground
或onStop
回调中处理资源释放或状态保存,以确保页面跳转后的资源管理得当。