前提:基于官网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.概念
2.功能与使用
与Android类似。
三、Want
1.概念
Want是对象间信息通报的载体,可以用于应用组件间的信息通报。其使用场景之一是作为startAbility()的参数,包罗了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA启动UIAbilityB并必要传入一些数据给UIAbilityB时,Want可以作为一个载体将数据传给UIAbilityB。
类似Android中的Bundle。
2.功能与使用
1.显式与隐式规则
通报的数据包罗参数:
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企服之家,中国第一个企服评测及商务社交产业平台。 |