OpenHarmony鸿蒙开发学习:【Ability的启动模式】

Stage模型中,实现standard、singleton、specified多种模式场景。

本实例参考[开发指南]gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md。 本实例需要使用[aa工具] 查看应用Ability 模式信息。

效果预览

使用说明

1、standard模式:

1)进入首页,点击番茄,会新建一个番茄的Ability,展示番茄的详情;

2)在番茄的详情界面,点击黄瓜,会新建一个黄瓜的Ability,展示黄瓜的详情;

3)使用aa工具查看Ability信息,此时存在以下Ability:1个番茄的Ability、1个黄瓜的Ability、1个首页的Ability;

2、singleton模式:

1)进入首页,点击冰淇凌,会新建一个冰淇凌的Ability,展示冰淇凌的详情;

2)在冰淇凌的详情界面,点击螃蟹,会复用冰淇凌的Ability,页面数据会刷新并展示螃蟹的详情;

3)使用aa工具查看Ability信息,此时存在以下Ability:1个冰淇凌的Ability、1个首页Ability;

3、specified模式:

1)进入首页,点击核桃,会新建一个核桃的Ability,展示核桃的详情;

2)在核桃的详情界面,点击蓝莓,会新建一个蓝莓的Ability,展示蓝莓的详情;

3)在蓝莓的详情界面,点击核桃,会复用已存在的核桃的Ability,实现specified模式下的单实例特性,页面数据会刷新并展示核桃的详情;

4)使用aa工具查看Ability信息,此时存在以下Ability:1个核桃的Ability、1个蓝莓的Ability、1个首页Ability;

具体实现

  • 本示例启动standard、singleton、specified三种模式的方法主要封装在Util当中,源码参考:[Util.ts]。
cpp 复制代码
/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import Logger from './Logger'

const TAG = '[Sample_StartMode]'
let contextCaller, want

interface EventHub {
  emit(event: string, ...args: Object[]): void
}

interface AbilityContext {
  eventHub: EventHub
}

export function getContextData(): any {
  Logger.info(TAG, 'UtilPage getContextData start')
  let context = getContext(this) as AbilityContext
  let data = {
    context: null,
    launchWant: null
  }
  context.eventHub.emit("getAbilityData", data)
  contextCaller = data.context // 拿到全局的context,即类似globalThis.mainAbilityContext
  want = data.launchWant
  Logger.info(TAG, 'UtilPage contextCaller ' + JSON.stringify(contextCaller))
  return { 'want': want }
}

export function startMode(wantParameters: any, abilityName: string) {
  Logger.info(TAG, `${abilityName} start`)
  getContextData()
  let want = {
    bundleName: 'ohos.samples.startmode',
    abilityName: abilityName,
    parameters: wantParameters
  }

  Logger.info(TAG, `${abilityName} contextCaller ${JSON.stringify(contextCaller)}`)
  contextCaller.startAbility(want).catch(err => {
    Logger.info(TAG, 'err is' + JSON.stringify(err))
  })
  Logger.info(TAG, `${abilityName} end`)
}

export function totast() {
  AlertDialog.show(
    {
      message: $r('app.string.totast'),
      secondaryButton: {
        value: 'ok',
        action: () => {
          Logger.info(TAG, 'Callback when the second button is clicked')
        }
      }
    }
  )
}
  • 新建Ability:创建三个代表standard、singleton、specified模式的Ability,如工程目录中的SingletonAbility、SpecifiedAbility、StandardAbility,并在module.json文件中将launchType属性修改为对应的启动模式属性。
  • 启动指定Ability:通过Util中的startMode函数根据页面所传的abilityName,启动对应的ability并进入详情页面。
  • specified多实例功能实现:specified模式则是根据MyAbilityStage中的onAcceptWant函数给用户返回一个ability标识,如果之前启动过标识的ability,不创建新的实例并拉回栈顶,否则创建新的实例并启动。

鸿蒙开发岗位需要掌握那些核心要领?

目前还有很多小伙伴不知道要学习哪些鸿蒙技术?不知道重点掌握哪些?为了避免学习时频繁踩坑,最终浪费大量时间的。

自己学习时必须要有一份实用的鸿蒙(Harmony NEXT)资料非常有必要。 这里我推荐,根据鸿蒙开发官网梳理与华为内部人员的分享总结出的开发文档。内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

废话就不多说了,接下来好好看下这份资料。

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习鸿蒙OpenHarmony知识←前往。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

其中内容包含:

《鸿蒙开发基础》鸿蒙OpenHarmony知识←前往

  1. ArkTS语言
  2. 安装DevEco Studio
  3. 运用你的第一个ArkTS应用
  4. ArkUI声明式UI开发
  5. .......

《鸿蒙开发进阶》鸿蒙OpenHarmony知识←前往

  1. Stage模型入门
  2. 网络管理
  3. 数据管理
  4. 电话服务
  5. 分布式应用开发
  6. 通知与窗口管理
  7. 多媒体技术
  8. 安全技能
  9. 任务管理
  10. WebGL
  11. 国际化开发
  12. 应用测试
  13. DFX面向未来设计
  14. 鸿蒙系统移植和裁剪定制
  15. ......

《鸿蒙开发实战》鸿蒙OpenHarmony知识←前往

  1. ArkTS实践
  2. UIAbility应用
  3. 网络案例
  4. ......

最后

鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

相关推荐
修己xj5 小时前
三月,我只想做好这四件事
程序员
不要秃头啊11 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
jonjia12 小时前
引入新维度化解权衡难题
程序员
jonjia12 小时前
优秀的工程师如何打破规则
程序员
jonjia12 小时前
在大厂交付大型项目的策略
程序员
jonjia12 小时前
RFC 与设计文档
程序员
jonjia12 小时前
为什么你(或任何人)应该成为一名研发经理?
程序员
jonjia12 小时前
管理技术质量 (Manage Technical Quality)
程序员
jonjia12 小时前
大厂软件工程师职业发展路径
程序员
jonjia12 小时前
关于工程师与影响力
程序员