Ability框架介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值