IT评测·应用市场-qidao123.com

标题: 一文搞懂HarmonyOS Next中各种Context [打印本页]

作者: 去皮卡多    时间: 2025-1-7 11:08
标题: 一文搞懂HarmonyOS Next中各种Context
背景

不管是Android照旧HarmonyOS Next都计划到一个上下文Context的概念,许多场景,比如获取文件资源等都需要依赖这个Context。Context有各种类型的Context,不同Context的获取方式,作用都不同,为了顺遂举行HarmonyOS开发,很有须要弄清楚各种Context。
Context概念

Context是应用中对象的上下文,其提供了应用的一些基础信息,比方resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些根本方法,比方createBundleContext()、getApplicationContext()等。
UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context。
各种Context继承关系如下:

各种Context的持有关系如下:

这内里提到了9种Context:
各种Context提供本领

下面看看各种Context提供了哪些本领。
BaseContext

BaseContext抽象类用于表现继承的子类Context是Stage模型照旧FA模型,是所有Context类型的父类。主要提供了stageMode属性:
名称类型可读可写阐明stageModeboolean是是表现是否Stage模型。

true:Stage模型

false:FA模型。 Context

Context模块继承自BaseContext,提供了ability或application的上下文的本领,包括访问特定应用程序的资源等。提供了如下属性:
名称类型只读可选阐明resourceManagerresmgr.ResourceManager否否资源管理对象。applicationInfoApplicationInfo否否当前应用程序的信息。cacheDirstring否否缓存目次。
tempDirstring否否临时目次。resourceDirstring否否资源目次。filesDirstring否否文件目次。databaseDirstring否否数据库目次。preferencesDirstring否否preferences目次。
bundleCodeDirstring否否安装包目次。不能拼接路径访问资源文件,请使用资源管理接口访问资源。distributedFilesDirstring否否分布式文件目次。cloudFileDir12+string否否云文件目次。eventHub[EventHub否否事件中央,提供订阅、取消订阅、触发事件对象。areacontextConstant.AreaMode否否文件分区信息。可以看到,Context已经有了获取资源和资源路径的属性。 提供方法:

ApplicationContext

ApplicationContext模块继承自Context,提供开发者应用级别的的上下文的本领,包括提供注册及取消注册应用内组件生命周期的监听接口。提供了下面方法:

AbilityStageContext

AbilityStageContext是AbilityStage的上下文环境,继承自Context。
AbilityStageContext提供允许访问特定于abilityStage的资源的本领,包括获取AbilityStage对应的ModuleInfo对象、环境变化对象。提供了如下属性:
名称类型可读可写阐明currentHapModuleInfoHapModuleInfo是否AbilityStage对应的ModuleInfo对象。configConfiguration是否环境变化对象。 UIAbilityContext

UIAbilityContext是需要保存状态的UIAbility所对应的context,继承自Context,提供UIAbility的相干配置信息以及操作UIAbility和ServiceExtensionAbility的方法,如启动UIAbility,停止当前UIAbilityContext所属的UIAbility,启动、停止、毗连、断开毗连ServiceExtensionAbility等。提供了以下属性:
名称类型可读可写阐明abilityInfoAbilityInfo是否UIAbility的相干信息。

元服务API: 从API version 11开始,该接口支持在元服务中使用。currentHapModuleInfoHapModuleInfo是否当前HAP的信息。

元服务API: 从API version 11开始,该接口支持在元服务中使用。configConfiguration是否与UIAbility相干的配置信息,如语言、颜色模式等。

元服务API: 从API version 11开始,该接口支持在元服务中使用。windowStage12+window.WindowStage是否当前WindowStage对象。仅支持在主线程调用。

元服务API: 从API version 12开始,该接口支持在元服务中使用。提供本领:
ExtensionContext

ExtensionContext是Extension的上下文环境,继承自Context。
ExtensionContext模块提供访问特定Extension的资源的本领,对于拓展的Extension,可直接将ExtensionContext作为上下文环境,或者界说一个继承自ExtensionContext的类型作为上下文环境。
提供了以下属性:
名称类型可读可写阐明currentHapModuleInfoHapModuleInfo是否所属Hap包的信息。

(详见SDK目次下的 api\bundle\hapModuleInfo.d.ts)configConfiguration是否所属Module的配置信息。

(详见SDK目次下的 api@ohos.app.ability.Configuration.d.ts)extensionAbilityInfoExtensionAbilityInfo是否所属Extension的信息。

(详见SDK目次下的 api\bundle\extensionAbilityInfo.d.ts) Context常见使用场景

上面临各种Context分析可以相识到,Context主要可以使用在以下场景:

以最典型的通过resourceManager获取字符串资源为例:
  1. static getStringSync(context: common.Context | undefined, resource: Resource): string {  
  2.   let rscManager = (context ?? getContext() as common.UIAbilityContext).resourceManager;  
  3.     return rscManager.getStringSync(resource.id)  
  4. }
复制代码
这里需要Context,我们在一般类中getContext获取到的Context是什么呢?
在页面中我们通过getContext与getUIContext查看获取的Context类型,分别为AbilityContext与UIContext:

在viewmodel中getContext拿到的也是同一个AbitlityContext:

总结

本文详细先容了HarmonyOS Next中各种Context直接关系与提供的属性和方法。
参考



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4