当前位置: 首页 > news >正文

深圳购物网站南充市企业网站建设

深圳购物网站,南充市企业网站建设,万网域名证书,网络科技公司上班做些什么鸿蒙HarmonyOS NEXT应用开发架构设计-模块生命周期管理 模块化开发 模块化开发已经是应用开发中的一个共识#xff0c;一般对于公司级的应用开发#xff0c;都会考虑是否可以进行模块化开发。 HarmonyOS NEXT系统应用开发目前使用的Stage模型其实就有涉及模块化开发的部分…鸿蒙HarmonyOS NEXT应用开发架构设计-模块生命周期管理 模块化开发 模块化开发已经是应用开发中的一个共识一般对于公司级的应用开发都会考虑是否可以进行模块化开发。 HarmonyOS NEXT系统应用开发目前使用的Stage模型其实就有涉及模块化开发的部分比如HAP、UIAbility。 但是官方模式总是存在一些莫名其妙的问题。 HAP 官方对于通过HAP进行模块化开发的场景见MultiHap。 使用多HAP时那最常见的HAP见跳转如何处理 使用Want跳转到其他的Ability在entry模块的index.ets中通过common.UIAbilityContext()配置Want作为多hap间信息传递的载体用于应用组件间的信息传递新hap的跳转在entry模块index.ets首页中在按钮.onclick()事件内通过Want配置显式拉起一个新的指定的Ability。例如以配置videoFeature模块Want配置为例在触发按钮事件中加入配置的Want· btn.onClick(() {this.context.startAbility({ bundleName: BUNDLE_NAME, abilityName: AUDIO_ABILITY_NAME }}· 其中bundleName为appscope文件夹下app.json5中bundleName: com.samples.multihap。· abilityName为videoFeature模块src/main/module.json5中abilities[name: VideoAbility] 也就是跨模块跳转需要用startAbility。 而正常的页面跳转是用router或者Navigation。 这样就存在方案的不一致性在做统一的路由管理时反而不方便。 AbilityStage组件容器 上面的HAP方案是基于应用包结构的。而Stage开发模型和应用包结构不等同官方文档也是分开讲述的。 多HAP方案对于模块生命周期的使用其实也是基于UIAbility的。 而UIAbility其实是不唯一的就算是在一个HAP中也可能存在多个。那么严格来说用UIAbility来进行模块生命周期管理其实也不足够恰当。 而Stage模型中也有一个专门的模块级别容器专门用来托管模块的生命周期AbilityStage组件容器。 AbilityStage是一个Module级别的组件容器应用的HAP在首次加载时会创建一个AbilityStage实例可以对该Module进行初始化等操作。AbilityStage与Module一一对应即一个Module拥有一个AbilityStage。 所以当你采用多HAP方案进行模块化开发时其实更应该用AbilityStage进行生命周期管理。 自主管理模块生命周期 那么除了HAP还有没有其他的模块生命周期管理方案呢 有的。 /*** Register ability lifecycle callback.** param { abilityLifecycle } type - abilityLifecycle.* param { AbilityLifecycleCallback } callback - The ability lifecycle callback.* returns { number } Returns the number code of the callback.* throws { BusinessError } 401 - Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.* syscap SystemCapability.Ability.AbilityRuntime.Core* stagemodelonly* crossplatform* atomicservice* since 11*/on(type: abilityLifecycle, callback: AbilityLifecycleCallback): number;系统其实开放了Ability级别的生命周期方法监听你可以通过注册的方式托管系统的生命周期管理方法然后用自己的逻辑进行处理。 比如 自定义一个ModuleLifecycleManager类通过监听方法接管生命周期管理。 ModuleLifecycleManager类增加管理方法允许自主添加具体模块的实例。ModuleLifecycleManager类内部在触发相关方法时遍历调用已添加模块的同名方法。可以使用HSP、HAR作为模块只需要在模块中创建模块实例并添加到ModuleLifecycleManager类中 参考实现 import LinkedList from ohos.util.LinkedList import AbilityLifecycleCallback from ohos.app.ability.AbilityLifecycleCallback; import UIAbility from ohos.app.ability.UIAbility; import window from ohos.window; import { Context } from ohos.abilityAccessCtrl;export declare class CustomAbilityLifecycleCallback extends AbilityLifecycleCallback {lazyInit(context : Context): void;onRegiste?(context : Context): void; }export class ModuleLifecycleManager {private constructor() {}private static instance: ModuleLifecycleManagerprivate lifecycleId 0context?: Contextpublic static getInstance(): ModuleLifecycleManager {if (!ModuleLifecycleManager.instance) {ModuleLifecycleManager.instance new ModuleLifecycleManager()}return ModuleLifecycleManager.instance}async init(context: Context, moduleFiles?: ArrayPromiseESObject) {this.context contexttry {for (let item of moduleFiles) {await item.then((result: ESObject) {result.registerAbilityLifecycleCallback()}).catch((error: ESObject) {})}this.lifecycleId this.context?.getApplicationContext().on(abilityLifecycle, abilityLifecycleCallback);} catch (paramError) {console.error(error: ${paramError.code}, ${paramError.message});}}async append(moduleFiles?: ArrayPromiseESObject) {try {for (let item of moduleFiles) {await item.then((result: ESObject) {result.registerAbilityLifecycleCallback()}).catch((error: ESObject) {})}} catch (paramError) {console.error(error: ${paramError.code}, ${paramError.message});}}unInit() {this.context?.getApplicationContext().off(abilityLifecycle, this.lifecycleId)}agreePrivacyPolicy() {for (let item of this.abilityLifecycleCallbacks) {item.lazyInit(this.context!)}}private abilityLifecycleCallbacks new LinkedListCustomAbilityLifecycleCallback()getAbilityLifecycleCallbacks(): LinkedListCustomAbilityLifecycleCallback {return this.abilityLifecycleCallbacks}registerAbilityLifecycleCallback(abilityLifecycleCallback: CustomAbilityLifecycleCallback) {this.abilityLifecycleCallbacks.add(abilityLifecycleCallback)if (abilityLifecycleCallback.onRegiste ! undefined) {abilityLifecycleCallback.onRegiste(this.context)}}unRegisterAbilityLifecycleCallback(abilityLifecycleCallback: CustomAbilityLifecycleCallback) {this.abilityLifecycleCallbacks.remove(abilityLifecycleCallback)} }let abilityLifecycleCallback: AbilityLifecycleCallback {onAbilityCreate: function (ability: UIAbility): void {for (let item of ModuleLifecycleManager.getInstance().getAbilityLifecycleCallbacks()) {item?.onAbilityCreate(ability)}},onWindowStageCreate: function (ability: UIAbility, windowStage: window.WindowStage): void {for (let item of ModuleLifecycleManager.getInstance().getAbilityLifecycleCallbacks()) {item?.onWindowStageCreate(ability, windowStage)}},// 其他方法省略... }总结 鸿蒙官方文档中罗列了太多的概念HAP/HSP/HAR、Entry/feature、Application/Ability/Window/Stage其实对于正常开发模式的讲解并不清晰。 而且build-profile.json5/module.json5等配置化的开发模式对于应用开发架构的灵活性有很大限制。 就像router/Navigation的路由表配置那样一旦涉及配置文件最终的方案基本都会归拢到hvigor插件上而不是纯代码的运行时。 配置化和运行时各自可能有利有弊吧本文仅提供一种新的架构解决方案供大家参考。
http://www.dnsts.com.cn/news/105560.html

相关文章:

  • 建设购物网站多少钱谷德设计网官网首页入口
  • 网站建设图文Wordpress提高pagespeed
  • wordpress快速建站视频教程wordpress远程图片
  • 西宁网站建设有限公司无锡网站App微信
  • 网络建站东北做网站微信朋友圈应该怎么发
  • 沈阳网站建设q479185700棒昆明做网站建设硬件设备
  • 芜湖营销型网站制作制作网站学什么软件
  • 海淀网站制作邯郸网站建设选哪家
  • 娱乐网站排行榜百度精简版入口
  • 电脑公司网站管理系统黑龙江能源建设网站
  • 兴文县建设工程网站请人做网站注意事项
  • 客户评价 网站建设杭州有做网站
  • 网站域名建设怎么填写热烈祝贺公司网站上线
  • 网站设计用什么字体好网站怎么添加横幅
  • 精通网站建设网页设计免费模板代码
  • 清远 网站建设如何做楼盘网站
  • 新闻静态网站模板下载自己做网站不推广
  • easyui做的网站购物网站模板代码
  • 物流网站的分类毕业设计做购物网站的要求
  • 2015做网站前景电子商务网站的定义
  • 柳市那些做网站的公司网络公司 给 客户网站备案
  • 做网站的那些个人工作室网站建设功能覆盖范围
  • 虚拟专用网络服务器网站如何做seo优化
  • 福田网站建设推广修改wordpress用户名
  • 转塘有做网站的吗网络营销软件哪个好用
  • 富阳网站网站做中英文英文太长怎么办
  • 网站空间就是服务器吗济南网站建设抖音平台
  • 安徽省芜湖建设定额网站东莞网站建设关键词
  • h5网站开发软件免费申请激活码
  • 网站虚拟空间过期文档流程做网站