Ability框架介绍

ops/2024/10/18 7:48:08/

Ability

Ability是应用所具备能力的抽象,也是应用程序的基本组成部分,主要包括组件生命周期回调、系统环境变化通知、应用跳转、卡片开发等能力。

Ability框架模型两种形态

  1. FA模型
  2. Stage模型

Stage模型

Stage模型中的应用组件是由Ability这个基础概念演化而来。
在Stage模型中,有两类Ability:

  • UIAbility:负责用户界面和用户交互。
  • ExtensionAbility:负责 UIAbility 之外的事情。
    在这里插入图片描述

Stage模型特点

  • 为复杂应用设计
  • 程序逻辑与用户界面解耦
  • 开放的扩展能力点

自定义Stage

在ets目录下创建MyStage

import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';
export default class MyStage extends AbilityStage{onAcceptWant(want: Want) {if(want.abilityName == 'ability1'){return "Ability1_"+want.parameters.instanceKey}return "";}}

在module.json5添加srcEntry配置

{"module": {"name": "entry","type": "entry","description": "$string:module_desc","mainElement": "EntryAbility","srcEntry": "./ets/MyStage.ts",....  
}

修改ability启动模式为specified,这样Ability才可以使用到自定义MyStage

{"name": "Ability1","srcEntry": "./ets/ability1/Ability1.ets","description": "$string:Ability1_desc","icon": "$media:layered_image","label": "$string:Ability1_label","startWindowIcon": "$media:startIcon","startWindowBackground": "$color:start_window_background","launchType": "specified"}

UIAbility

UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility是系统
调度的基本单元,为应用提供绘制界面的窗口,一个UIAbility可以对应于多个页面,建
议将一个独立的功能模块放到一个UIAbility中,以多页面的形式呈现。

UIAbility的生命周期原理

在这里插入图片描述

UIAbility组件启动模式

启动模式描述说明
Singleton单实例当用户打开浏览器应用,并浏览访问相关内容后,回到桌面,再次打开该应用,显示的仍然是用户当前访问的界面。
Standard多实例用户在使用分屏功能时,希望使用两个不同应用(例如备忘录应用和图库应用)之间进行分屏,也希望能使用同一个应用(例如备忘录应用自身)进行分屏。
Specified指定实例用户打开文档应用,从文档应用中打开一个文档内容,回到文档应用,继续打开同一个文档,希望打开的还是同一个文档内容;以及在文档应用中新建一个新的文档,每次新建文档,希望打开的都是一个新的空白文档内容。

启动模式修改

在module.json5中通过launchType配置具体的启动模式,缺省情况下是singleton模式

"abilities": [{"name": "EntryAbility","launchType": "singleton"}
]

Ability创建

使用DevEcoStudio工具,在工程main目录下,点击鼠标右键> New > Ability
在创建的Ability文件中修改指定的页面路径pages/Page1

windowStage.loadContent('pages/Page1', (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});

UIAbility启动流程

Stage模型下,每个Ability中都包含了一个 Context属性。UIAbilityContext属性为AbilityContext类,通过调用AbiityContext类的startAbility()方法即可启动。
在这里插入图片描述
代码实现

Button("jump to Ability1").fontSize(30).onClick(()=>{let context = getContext(this) as common.UIAbilityContextlet want:Want ={deviceId:"",bundleName: "com.example.myapplication2",//从app.json5获取moduleName:"entry",//从module.json5获取abilityName:"Ability1"//跳转的Ability名字}context.startAbility(want)//启动Ability})

思考题

1. Stage模型可以分为UIAbility组件和ExtensionAbility组件两大类。(A)
A. 正确
B. 错误

2. Ability的生命周期包括以下哪几种状态?(ABCD)
A. Create
B. Foreground
C. Background
D. Destroy


http://www.ppmy.cn/ops/89578.html

相关文章

安卓自定义控件

文章目录 引入布局创建自定义控件 引入布局 首先创建一个项目&#xff0c;创建一个空的活动。然后右键单击res/layout创建一个Layout Resource File文件&#xff0c;取名title.xml。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmln…

经典图论算法回顾之Bellman-Ford算法

Dijkstra最短路径算法存在的一个问题是不能处理负权图&#xff08;详见&#xff1a;经典图论算法回顾之Dijkstra算法。今天要回顾的Bellman-Ford算法&#xff08;wikipedia&#xff1a;Bellman–Ford algorithm&#xff09;可以求出有负权图的最短路径&#xff0c;并可以对最短…

【前端 20】Element-UI快速入门

探索Element UI组件库&#xff1a;快速搭建Vue应用的必备工具 在现代Web开发中&#xff0c;Vue.js以其轻量级和灵活性赢得了广泛的关注。而Element UI&#xff0c;作为Vue.js的一个UI组件库&#xff0c;更是为开发者们提供了丰富、易用的前端组件&#xff0c;极大地加速了开发过…

TCL 实业 x TiDB丨从分销转向零售,如何考虑中台建设和数据库选型?

导读 在数字化转型的浪潮中&#xff0c;TCL 实业通过“新方舟”项目构建统一中台&#xff0c;实现了从分销向零售的转型&#xff0c;显著提升了业务精准度和效率。本文根据 InfoQ 记者高玉娴对 TCL 实业企业架构部架构师蔡玖发的采访整理&#xff0c;揭秘了 TCL 实业在这一转型…

Cocos Creator 3.8.x bundle核心知识点

bundle官网知识文档&#xff1a; https://docs.cocos.com/creator/3.8/manual/zh/asset/bundle.html bundle核心知识点如下&#xff1a;

【MATLAB源码】机器视觉与图像识别技术(7)续---BP神经网络

系列文章目录在最后面&#xff0c;各位同仁感兴趣可以看看&#xff01; BP神经网络 第一节、BP网络定义第二节、BP网络结构及其特点第三节、信息传播方式 信息的正向传播&#xff1a;实质是计算网络的输出误差的反向传播&#xff1a;实质是学习过程第四节、 BP网络的算法流程…

牛客JS题(十九)继承

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 构造函数实现类ES6类的写法原型链的应用 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><script type"text…

SAP与九恒星资金系统集成案例(医药行业)

一、项目环境 江西某药业有限公司是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今&#xff0c;企业经营一直呈现稳健、快速发展的态势集团总销售额超40亿元。 为了帮助企业更好的进行资金流、结算、资金调度和运作管理、风险控制&#xff0c;济民…