鸿蒙 Stage模型-AbilityStage、Context、Want
前提:基于官网3.1/4.0文档。参考官网文档基于Android开辟体系来进行比力和思考。(或有偏颇,自行斟酌)
一、 AbilityStage
1.概念
AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。
AbilityStage与Module逐一对应,即一个Module拥有一个AbilityStage。
类同Application
2.功能与使用
1. 设置
module.json5中:
{
"module": {
"name": "entry",
"type": "entry",
"srcEntry": "./ets/myabilitystage/MyAbilityStage.ts",
...
}
}
2.使用
import AbilityStage from '@ohos.app.ability.AbilityStage';
export default class MyAbilityStage extends AbilityStage {
onCreate() {
// 应用的HAP在首次加载的时,为该Module初始化操作
}
onAcceptWant(want) {
// 仅specified模式下触发
return "MyAbilityStage";
}
}
[*]onCreate()生命周期回调:在开始加载对应Module的第一个UIAbility实例之前会先创建AbilityStage,并在AbilityStage创建完成之后执行其
onCreate()生命周期回调。AbilityStage模块提供在Module加载的时候,关照开辟者,可以在此进行该Module的初始化(如资源预加载,线程创建等)能力。
[*]onAcceptWant()事故回调:UIAbility指定实例模式(specified)启动时候触发的事故回调,具体使用请参见UIAbility启动模式综述。
[*]onConfigurationUpdated()事故回调:当体系全局设置发生变更时触发的事故,体系语言、深淡色等,设置项目前均定义在Configuration类中。
[*]onMemoryLevel()事故回调:当体系调解内存时触发的事故。
二、Context
1.概念
https://i-blog.csdnimg.cn/blog_migrate/54fb748dec51b1ea65fa271da264e307.png
https://i-blog.csdnimg.cn/blog_migrate/172dbd7beb9dce7951d6ae1481d6fe2d.png
2.功能与使用
与Android类似。
三、Want
1.概念
Want是对象间信息通报的载体,可以用于应用组件间的信息通报。其使用场景之一是作为startAbility()的参数,包罗了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA启动UIAbilityB并必要传入一些数据给UIAbilityB时,Want可以作为一个载体将数据传给UIAbilityB。
https://i-blog.csdnimg.cn/blog_migrate/d1024c912c7876c8c766a7858b83d20a.png
类似Android中的Bundle。
2.功能与使用
1.显式与隐式规则
https://i-blog.csdnimg.cn/blog_migrate/a31d948d51f287ec1f4255536a399e5f.png
https://i-blog.csdnimg.cn/blog_migrate/71ad294995aaa3f9b37d561460d579b4.png
https://i-blog.csdnimg.cn/blog_migrate/d7c19908ad265e1994b0759569783afb.png
https://i-blog.csdnimg.cn/blog_migrate/6e1421b158b8182534998011486f820d.png
通报的数据包罗参数:
deviceId、bundleName、moduleName、abilityName、uri、type、action、entities、flags、parameters。
其中abilityName指定了值则为显式规则,否则为隐式规则。
匹配规则偏向于正则表达式匹配规则、包罗关系。
2.action与entities
action
表现调用方要执行的通用操作(如查看、分享、应用详情)
ACTION_HOME:启动应用入口组件的动作,必要和ENTITY_HOME配合使用;
ACTION_CHOOSE:选择当地资源数据,比方接洽人、相册等;
ACTION_VIEW_DATA:查看数据,当使用网址uri时,则表现显示该网址对应的内容。
ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作
entities
表现目标Ability的种别信息(如欣赏器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开辟者可定义该字段,来过滤匹配应用的种别,比方必须是欣赏器。在Want内声明entities字段表现盼望被调用方应用属于声明的种别。在被调用方应用设置文件skills字段内声明entites表现该应用支持的种别。
ENTITY_DEFAULT:默认种别无现实意义。
ENTITY_HOME:主屏幕有图标点击入口种别。
ENTITY_BROWSABLE:指示欣赏器种别。
action ->action
entities -> intent-filter?
3.案例
1.显式跳转
import common from '@ohos.app.ability.common';
// ...
async explicitStartAbility() {
try {
// Explicit want with abilityName specified.
let want = {
deviceId: "",
bundleName: "com.example.myapplication",
abilityName: "calleeAbility"
};
let context = getContext(this) as common.UIAbilityContext;
await context.startAbility(want);
console.info(`explicit start ability succeed`);
} catch (error) {
console.info(`explicit start ability failed with ${error.code}`);
}
}
// ...
注意这里对调用方法使用了async和await。归根到底应该是使用了await导致整个方法是async。 startAbility是异步的的好理解,但是为什么要单独加上那个await修饰符呢?
2.隐式跳转
1.被调用放设置
"skills": [
{
"entities": [
"entity.system.browsable"
// ...
],
"actions": [
"ohos.want.action.viewData"
// ...
],
"uris": [
{
"scheme": "https",
"host": "www.test.com",
"port": "8080",
// prefix matching
"pathStartWith": "query",
"type": "text/*"
},
{
"scheme": "http",
// ...
}
// ...
]
},
]
[*]调用方调用
async implicitStartAbility() {
try {
let want = {
// uncomment line below if wish to implicitly query only in the specific bundle.
// bundleName: "com.example.myapplication",
"action": "ohos.want.action.viewData",
// entities can be omitted.
"entities": [ "entity.system.browsable" ],
"uri": "https://www.test.com:8080/query/student",
"type": "text/plain"
}
let context = getContext(this) as common.UIAbilityContext;
await context.startAbility(want)
console.info(`explicit start ability succeed`)
} catch (error) {
console.info(`explicit start ability failed with ${error.code}`)
}
}
匹配规则为链式,顺序为:action->entities->urls->type,满足前序条件才能进行到后续匹配。
四、总结
AbilityStage->Application
Context->Contenxt
Want->Bundle
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]