Ability框架介绍

news2025/1/21 18:57:46

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.UIAbilityContext
    let 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.coloradmin.cn/o/1978452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM动手实践(一): 微调google的bert和vit模型完成文本和图片的分类任务

1. 写在前面 最近大模型比较火热,也正好在公司开始接触这块相关的业务,大模型是未来的趋势,对于研发工程师来讲,是powerful的效能工具,所以想沉淀一些大模型实践相关的笔记来记录自己在使用大模型产品,部署…

基于的X86+FPGA轨道交通模块化计算机,标准3U无风扇,支持国产化定制

支持Intel Socket G2 Mobile Sandy/Ivy Bridge i7/i5/i3处理器,Intel QM67/QM77,2*LAN,2*USB2.0,2*USB3.0,3*COM,3U ◆ 支持Intel Socket G2 Mobile Sandy/Ivy Bridge i7/i5/i3处理器,Intel QM67/QM77 ◆ 1*DDR3 SO-DIMM内存 ◆ 1*VGA,1*HDMI ◆ 2*LAN,2*USB2.0,2*USB3.0,3*…

Opencv学习-图像连接(vconcat函数和hconcat函数)

1. vconcat函数介绍(竖向连接) void cv::vconcat(const Mat * src, size_t nsrc, OutputArray dst ) src:Mat矩阵类型的数组。 nsrc:数组中 Mat 类型数据的个数。 dst:连接后的 Mat类矩阵。 该函数对存放在数组矩阵中…

gpt-4.o mini

https://share.xuzhugpt.cloud/ gpt-4.o mini 目前免费使用 把上面[chatgpt4o-mini-xuzhu]复制到UserToken的文本框中 点击[个人账户] 测试一下哈,看看:

2435. 矩阵中和能被 K 整除的路径(leetcode)

文章目录 写在前面题目来源思路code 写在前面 看题解看了半天都看不懂,看了视频也看了好久,最后还是自己手动模拟才懂的,大佬们写的代码非常好,自己根本想不到该如何用代码实现出来,还是得多刷题,多见一些…

【5G NAS】全球唯一临时标识符GUTI介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

计算机毕业设计选题推荐-体育商城-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节

目录 1、问题说明 2、从Visual Studio输出窗口中找到了线索,发生了Stack Overflow线程栈溢出的异常 3、发生Stack Overflow线程栈溢出的原因分析 4、线程占用的栈空间大小说明 5、引发线程栈溢出的常见原因和场景总结 6、在问题函数入口处添加return语句&…

How dose age change how you leanr?(1)年龄如何影响学习能力?(一)

As you get older, learning often feels harder than it used to.Why is that?What changes in the brain as we age that makes acquire new information harder? Is there anything we can do to avoid our minds slowing down? 随着年龄增长,常常会觉得学习…

Vue+live2d实现虚拟人物互动(一次体验叙述)

目录 故事的开头: 最终的实现效果: 实现步骤: 第一步:下载重要文件 第二步:创建vue项目文件,将刚下载文件拷贝到public目录下 第三步:在index.html文件中引入js 第四步:使用&…

SAM 2:Segment Anything in Images and Videos 论文详解

SAM 2:Segment Anything in Images and Videos 文章目录 SAM 2:Segment Anything in Images and Videos摘要1 Introduction具体分析: 2 Related work具体分析: 3 任务:可提示的视觉分割4 模型具体分析: 5 数据5.1 Data engine5 . 2 SA - V数据…

c++ 初始值设定项列表(initializer_list)

引例 我们在写c代码的时候,多多少少会遇到这样写的: 如果是这样写还好说: 第一个是因为编译器强制匹配参数。 其他都是因为在有对应构造函数的情况下支持的隐式类型转换。 而支持的构造函数是这个: 如果有不懂的可以开这一篇&a…

致远互联FE协作办公平台apprvaddNew接口SQL注入漏洞复现 [附POC]

文章目录 致远互联FE协作办公平台apprvaddNew接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现致远互联FE协作办公平台apprvaddNew接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内…

BGP对等体组、聚合、路由反射器、联盟、团体属性

一.实验拓扑 二.实验需求 1.AS1中存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告 As3中存在两个环回,一个地址为192.168.2.0/24,、该地址不能在任何协议中宣告,最终要求这两个环回可以ping通; 2.整个AS2的I…

【数据结构】栈和队列(c语言实现)(附源码)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 一、栈 1.栈的概念与结构 2.栈的实现 2.1 栈的结构定义 2.2 方法的声明 2.3 方法的实现 2.3.1 初始化 2.3.2 销毁 2.3.3 判空 2.3.4 压…

OpenCV||超详细的图像边缘检测

一、基本概念 1.图像边缘检测目的 特征提取:边缘是图像中亮度变化最显著的部分,它们通常对应于物体的轮廓、不同区域的边界等。通过边缘检测,可以从图像中提取出这些重要的特征信息,为后续处理如图像分割、目标识别等提供基础。 …

请你学习:前端布局3 - 浮动 float

1 标准流(也称为普通流、文档流) 标准流(也称为普通流、文档流)是CSS中元素布局的基础方式,它决定了元素在页面上的默认排列方式。这种布局方式遵循HTML文档的结构,不需要额外的CSS样式来指定元素的位置。…

python open cv(图像处理的基本操作)

概要图 1读取图像 cv2.imread() 函数是OpenCV库中用于读取图像文件的函数。它有两个参数: 文件名:这是第一个也是必需的参数,它指定了要读取的图像文件的路径和文件名。这个路径可以是相对路径,也可以是绝对路径。 标志&#xf…

小技巧大功效,「仅阅读两次提示」让循环语言模型超越Transformer++

在当前 AI 领域,大语言模型采用的主流架构是 Transformer。不过,随着 RWKV、Mamba 等架构的陆续问世,出现了一个很明显的趋势:在语言建模困惑度方面与 Transformer 较量的循环大语言模型正在快速进入人们的视线。 令人兴奋的是&am…

c++ string解析及其实现

因为字符串是固定长度&#xff0c;不好进行操作&#xff0c;因此c就用类将字符串进行了封装让其变得方便实用。 要深刻了解string&#xff0c;我们必须要熟练掌握类的使用&#xff0c;如果还有疑问可以看这一篇博客:c 类 (要学习类这一篇就够了 ) string #include<string…