鸿蒙 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";}
}
  1. onCreate()生命周期回调:在开始加载对应Module的第一个UIAbility实例之前会先创建AbilityStage,并在AbilityStage创建完成之后执行其
    onCreate()生命周期回调。AbilityStage模块提供在Module加载的时候,通知开发者,可以在此进行该Module的初始化(如资源预加载,线程创建等)能力。
  2. onAcceptWant()事件回调:UIAbility指定实例模式(specified)启动时候触发的事件回调,具体使用请参见UIAbility启动模式综述。
  3. onConfigurationUpdated()事件回调:当系统全局配置发生变更时触发的事件,系统语言、深浅色等,配置项目前均定义在Configuration类中。
  4. 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}`);}}
// ...

注意这里对调用方法使用了asyncawait。归根到底应该是使用了await导致整个方法是asyncstartAbility是异步的的好理解,但是为什么要单独加上那个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",// ...}// ...]},
]
  1. 调用方调用
    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721595.shtml

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

相关文章

融资项目——nacos注册中心

1.在分布式微服务架构中,注册中心是核心的基础服务之一。 2.服务治理的实现主要依靠的就是注册中心,用来进行服务的发现与注册。 一、服务注册 就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到注册中心上去。例如B服务在某些服务器上线…

前端面试练习24.3.4

目录 普通问题 说一说 严格模式和 非严格模式 关键词: 具体: SSL/TLS加密 很基础的重点 什么是原型链,说说相关的理解 接下来阐述什么原型: 关系: 说一说你对闭包的理解 闭包的核心概念有三个要素&#xff1…

使用conda安装rasa macbook亲测有效

要使用conda安装Rasa,你可以按照以下步骤进行操作: 首先,确保你已经安装了Anaconda或Miniconda,并且conda命令可以在终端或命令提示符中正常运行。 创建一个新的conda虚拟环境,专门为Rasa安装。这样做可以隔离Rasa及其…

租房招聘平台新篇章:Java+SpringBoot技术革新

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

ansible批量筛选出指定操作系统的主机列表

查看主机操作系统的shell脚本getOS.sh #!/bin/bash# 获取操作系统信息 os_info$(hostnamectl | grep Operating System | awk -F : {print $NF})# 检查是否包含"centos" if echo "$os_info" | grep -E *centos* > /dev/null; then# 打印主机IPecho &qu…

嵌入式面试常见问题(四)

1.在基于Linux的网络套接字编程中,如果需要创建一个IPv4的网络套接字,应该在socket函数中指定domain参数为AF_INET 解析: socket()函数创建套接字 函数原型:int socket(int domain, int type, int protocol); domain:协议簇&…

js教程(2)

一、运算符 1.赋值运算符 对变量进行赋值的运算符叫做赋值运算符,除了“”以外,还有一些复合赋值运算符:“”、“-”、“*”、“/”、“%“,使用这些运算符可以在对变量赋值时进行快速操作,例如: let num…

k8s-prometheus应用监控 23

使用prometheus监控,结合prometheus传递的指标,从而实现业务监控的自动化弹缩。 注:部署集群需要消耗较大的内存,需要提前扩容各节点的内存量至少达到4g 部署一个用于被监控的应用 上传所需镜像 修改yaml文件 部署完成 没有就绪是…

Linux检查软件信息及Linux清理日志等功能

提示:工具下载链接在文章最后 目录 一.ywtool check命令1.1 ywtool check -I1.2 ywtool check all1.3 ywtool check io1.4 ywtool check elk1.5 ywtool check php1.6 ywtool check mysql1.7 ywtool check nginx1.8 ywtool check system1.9 ywtool check docker_nbip [容器名称]…

mysql主从问题整理

以下3种情况是在HA切换时,由于是异步复制,且sync_binlog0,会造成一小部分binlog没接收完导致同步报错。 第一种:在master上删除一条记录,而slave上找不到。 第二种:主键重复。在slave已经有该记录&#x…

MyCAT集群——MyCAT2如何配置读写分离

先搭载MySQL一主两从 192.168.20.110MyCAT192.168.20.111Master192.168.20.112slave1192.168.20.113slave2 配置就不写了,比较基础,写一下步骤 1.进入mysql配置文件或者其子配置文件,添加server_id,开启gtidgtid_modeON,enforce-gtid-cons…

SAP 修改记录写入的思考

上一篇 调用SAP 采购配额维护 SAP ABAP 采购配额维护-CSDN博客 ME_UPDATE_QUOTA没有写入修改记录里面,使得从修改记录的表数据读取的报表/接口 取不到数据了 参考 https://wenku.baidu.com/view/95052a8ccd22bcd126fff705cc17552707225ea3.html?_wkts_17096217505…

STM32:CAN功能板设计和调试

0前言 本文主要目的是,总结去年设计stm32-CAN板子过程中遇到的问题,分为keil嵌入式软件和嘉立创EDA设计两个部分。 1 STM32F1 CAN功能 keil expected a “}“ 问题在于,PCB使用芯片为stm32f103c8t6,下载程序时选择device默认此…

项目部署发布

目录 上传数据库 修改代码中的数据源配置 修改配置文件中的日志级别和日志目录 打包程序 ​编辑​编辑 上传程序 查看进程是否在运行 以及端口 云服务器开放端口(项目所需要的端口) 上传数据库 通过xshell控制服务器 创建目录 mkdir bit_forum 然后进入该目录 查看路…

012 Linux_线程控制

前言 本文将会向你介绍线程控制(创建(请见上文),终止,等待,分离) 线程控制 线程终止 pthread_t pthread_self(void); 获取线程自身的ID 如果需要只终止某个线程而不终止整个进程,可以有三种…

第十一章 配置 IIS 以与 Web 网关配合使用 (Windows) - 配置 IIS 返回 SOAP 故障详细信息

文章目录 第十一章 配置 IIS 以与 Web 网关配合使用 (Windows) - 配置 IIS 返回 SOAP 故障详细信息配置 IIS 返回 SOAP 故障详细信息 第十一章 配置 IIS 以与 Web 网关配合使用 (Windows) - 配置 IIS 返回 SOAP 故障详细信息 配置 IIS 返回 SOAP 故障详细信息 遇到错误的 IRI…

【C语言】Leetcode 206.反转链表

博主主页:17_Kevin-CSDN博客 收录专栏:《Leetcode》 题目 解决思路 思路一:翻转链表 struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return NULL;}struct ListNode* n1 NULL,*n2 head,*n3 n2 -> next;while(…

线上问题——学习记录幂等判断失效问题分析

一、业务流程 上图是对save和saveScore两个接口的流程抽象,save是上传答题数据,saveScore则是上传答题分数,为保证幂等和防止并发调用,这两个接口都加了分布式锁(还是两层哦)。第一层使用的是不同的锁&…

Python 运算符介绍

Python 解释 Python是一种高级编程语言,以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言,适用于广泛的应用领域,包括软件开发、数据分析、人工智能等。python是一种解释型,面向对象、动态数据类型的高级程序设计…

【笔记】Android 漫游定制SPN定制有关字段

一、SPN模块简介 【笔记】SPN和PLMN 运营商网络名称显示 Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍 【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag) 二、相关配置字段 non_roaming_operator_string_array 是否…