0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-10 16:32 次阅读

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

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

效果预览

image.png

使用说明

搜狗高速浏览器截图20240326151450.png

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]。
/*

 * 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,不创建新的实例并拉回栈顶,否则创建新的实例并启动。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    55

    文章

    1645

    浏览量

    42123
  • OpenHarmony
    +关注

    关注

    23

    文章

    3320

    浏览量

    15161
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发学习:【OpenHarmony HAR】

    OpenHarmony js/ts三方库使用的是OpenHarmony静态共享包,即HAR(Harmony Archive),可以包含js/ts代码、c++库、资源和配置文件。通过HAR,可以实现
    的头像 发表于 03-18 16:27 263次阅读

    深圳市24年,实现鸿蒙原生应用数占全国总量10%以上

    。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发学习路线图。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。它由两位前阿里高级研发工程师联合打造的《
    发表于 03-04 21:42

    鸿蒙实战项目开发:【短信服务】

    ://gitee.com/openharmony/applications_app_samples.git git pull origin master ​ 最后呢,很多开发朋友不知道需要学习那些
    发表于 03-03 21:29

    鸿蒙这么大声势,为何迟迟看不见岗位?最新数据来了

    。 话不多说,我们直接看详细资料鸿蒙OpenHarmony学习手册(共计1236页)与鸿蒙OpenHarmony
    发表于 02-29 20:53

    盘点那些硬件+项目学习套件:Hi3861鸿蒙开发板及入门常见问题解答

    的一款用于鸿蒙设备开发鸿蒙物联网开发学习开发板。主控为华为海思Hi3861LV100芯片,内
    发表于 02-01 16:55

    鸿蒙不再兼容安卓,那么鸿蒙开发者是否会大增?

    鸿蒙技术,享受蓝海红利。 鸿蒙的技术技能体系是怎么的?其实鸿蒙的板块内容也是居多的,可以用一张鸿蒙开发
    发表于 01-31 22:17

    淘宝与华为合作将基于HarmonyOS NEXT启动鸿蒙原生应用开发

    1月25日,淘宝与华为举办鸿蒙合作签约仪式,宣布将基于HarmonyOS NEXT启动鸿蒙原生应用开发
    的头像 发表于 01-26 16:14 563次阅读

    淘宝正式启动华为鸿蒙原生应用开发

    华为与淘宝近日宣布,淘宝已正式启动鸿蒙原生应用开发。这一合作标志着鸿蒙生态在电商领域的布局进一步扩大,将为用户带来全新的全场景购物体验。
    的头像 发表于 01-26 15:59 396次阅读

    多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

    鸿蒙生态迎「关键一战」,多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?
    的头像 发表于 01-24 11:47 276次阅读
    多家头部企业宣布「<b class='flag-5'>启动</b><b class='flag-5'>鸿蒙</b>原生应用<b class='flag-5'>开发</b>」,你看好<b class='flag-5'>鸿蒙</b>系统走向「独立」吗?

    京东正式启动鸿蒙原生应用开发

    华为与京东于近日宣布达成一项重要合作,正式启动鸿蒙原生应用开发。这一合作旨在利用HarmonyOS NEXT的独特优势,为消费者提供更出色的购物体验。
    的头像 发表于 01-18 15:02 398次阅读

    鸿蒙开发OpenHarmony组件复用案例

    ) } }, item => item) } } } 本文主要是对鸿蒙开发基础当中的OpenHarmony技术组件复用示例, 更多鸿蒙开发
    发表于 01-15 17:37

    免费学习鸿蒙(HarmonyOS)开发,一些地址分享

    国内一流高校。通过鸿蒙班的设立,高校可以为学生提供专业的鸿蒙OS学习环境和丰富的实践机会,培养出更多的鸿蒙开发人才,为
    发表于 01-12 20:48

    鸿蒙设备-开发板基础学习(BearPi-HM Micro)

    theme: minimalism 每当学习一门新的编程语言或者上手一款新的开发板,在学习鸿蒙设备开发过程中,带大家写的第一个程序,通过这个
    发表于 01-08 21:54

    鸿蒙Ability开发-Stage模型下Ability的创建和使用

    Ability开发技术的简单运用,更多的鸿蒙开发技术可以前往我主页查询,下面分享鸿蒙开发4.0
    发表于 01-08 15:34

    米哈游宣布启动鸿蒙原生应用开发

    12月18日,米哈游宣布将基于HarmonyOS NEXT启动鸿蒙原生应用开发,成为又一家启动鸿蒙原生应用
    的头像 发表于 12-18 10:07 296次阅读