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

审核编辑 黄宇

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

    关注

    57

    文章

    2352

    浏览量

    42858
  • OpenHarmony
    +关注

    关注

    25

    文章

    3722

    浏览量

    16317
收藏 人收藏

    评论

    相关推荐

    OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

    开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval
    的头像 发表于 12-24 11:46 163次阅读
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?触觉智能RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示

    本文介绍开源鸿蒙OpenHarmony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新Open
    的头像 发表于 11-18 19:03 326次阅读
    如何在开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>开启SELinux<b class='flag-5'>模式</b>?RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    鸿蒙OpenHarmony南向/北向快速开发教程-迅为RK3568开发

    4.1学习之旅了吗?快来加入我们,一起探索鸿蒙4.1系统的无限魅力吧! 【北京迅为】OpenHarmony学习开发系列教程(第1期 北向基础
    发表于 07-23 10:44

    鸿蒙开发启动本地PageAbility

    PageAbility相关的能力通过featureAbility提供,启动本地Ability通过featureAbility中的startAbility接口实现。
    的头像 发表于 06-18 09:29 293次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>:<b class='flag-5'>启动</b>本地PageAbility

    鸿蒙开发:PageAbility的启动模式

    启动模式对应PageAbility被启动时的行为,支持单实例模式、多实例模式两种启动
    的头像 发表于 06-17 14:35 358次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>:PageAbility的<b class='flag-5'>启动</b><b class='flag-5'>模式</b>

    鸿蒙Ability Kit(程序框架服务)【UIAbility组件启动模式

    UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式
    的头像 发表于 06-06 11:05 838次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> Kit(程序框架服务)【UIAbility组件<b class='flag-5'>启动</b><b class='flag-5'>模式</b>】

    鸿蒙开发接口Ability框架:【AbilityDelegator】

    OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability启动指定ability等。
    的头像 发表于 05-16 16:48 936次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口<b class='flag-5'>Ability</b>框架:【AbilityDelegator】

    鸿蒙开发接口Ability框架:【(AbilityDelegator)】

    OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability启动指定ability等。
    的头像 发表于 05-13 17:58 962次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口<b class='flag-5'>Ability</b>框架:【(AbilityDelegator)】

    鸿蒙开发接口Ability框架:【@ohos.ability.particleAbility (particleAbility模块)】

    particleAbility模块提供了Service类型Ability的能力,包括启动、停止指定的particleAbility,获取dataAbilityHelper,连接、断开当前Ability与指定ServiceAbil
    的头像 发表于 05-09 10:21 718次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口<b class='flag-5'>Ability</b>框架:【@ohos.<b class='flag-5'>ability</b>.particleAbility (particleAbility模块)】

    鸿蒙开发接口Ability框架:【@ohos.ability.featureAbility (FeatureAbility模块)】

    FeatureAbility模块提供带有UI设计与用户交互的能力,包括启动新的ability、获取dataAbilityHelper、设置此Page Ability、获取当前Ability
    的头像 发表于 05-06 16:31 1002次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口<b class='flag-5'>Ability</b>框架:【@ohos.<b class='flag-5'>ability</b>.featureAbility (FeatureAbility模块)】

    鸿蒙开发接口Ability框架:【@ohos.application.Ability (Ability)】

    Ability模块提供对Ability生命周期、上下文环境等调用管理的能力,包括Ability创建、销毁、转储客户端信息等。
    的头像 发表于 04-30 17:42 2267次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>接口<b class='flag-5'>Ability</b>框架:【@ohos.application.<b class='flag-5'>Ability</b> (<b class='flag-5'>Ability</b>)】

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

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

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

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

    鸿蒙开发OpenHarmony组件复用案例

    ) } }, item => item) } } } 本文主要是对鸿蒙开发基础当中的OpenHarmony威廉希尔官方网站 组件复用示例, 更多鸿蒙开发
    发表于 01-15 17:37

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

    Ability开发威廉希尔官方网站 的简单运用,更多的鸿蒙开发威廉希尔官方网站 可以前往我主页查询,下面分享鸿蒙开发4.0
    发表于 01-08 15:34