一文搞懂HarmonyOS Next中各种Context

打印 上一主题 下一主题

主题 1032|帖子 1032|积分 3096

背景

不管是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:

  • BaseContext
  • Context
  • ApplicationContext
  • AbilityStageContext
  • UIAbilityContext
  • ExtensionContext
  • 其他ExtensionContext
  • FormExtensionContext
  • ServiceExtensionContext
各种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已经有了获取资源和资源路径的属性。 提供方法:


  • getApplicationContext(): ApplicationContext:获取本应用的应用上下文
  • getGroupDir(dataGroupID: string): Promise<string>:通过使用应用中的Group ID获取对应的共享目次,使用Promise异步回调。
  • getGroupDir(dataGroupID: string, callback: AsyncCallback<string>): void:通过使用应用中的Group ID获取对应的共享目次,使用callback异步回调。
ApplicationContext

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


  • on(type: 'abilityLifecycle', callback: AbilityLifecycleCallback): number:注册监听应用内生命周期。使用callback异步回调。仅支持主线程调用
  • off(type: 'abilityLifecycle', callbackId: number, callback: AsyncCallback<void>): void:取消监听应用内生命周期。使用callback异步回调。仅支持主线程调用。
  • on(type: 'environment', callback: EnvironmentCallback): number:注册对系统环境变化的监听。使用callback异步回调。仅支持主线程调用。
  • off(type: 'environment', callbackId: number, callback: AsyncCallback<void>): void:取消对系统环境变化的监听。使用callback异步回调。仅支持主线程调用。
  • on(type: 'applicationStateChange', callback: ApplicationStateChangeCallback): void:注册对当前应用前后台变化的监听。使用callback异步回调。仅支持主线程调用。
  • off(type: 'applicationStateChange', callback?: ApplicationStateChangeCallback): void:取消当前应用注册的前后台变化的全部监听。使用callback异步回调。仅支持主线程调用
  • getRunningProcessInformation(): Promise<Array<rocessInformation>>:获取有关运行历程的信息。使用Promise异步回调。
  • getRunningProcessInformation(callback: AsyncCallback<Array<rocessInformation>>): void:获取有关运行历程的信息。使用callback异步回调。
  • killAllProcesses(): Promise<void>:停止应用的所有历程,历程退出时不会正常走完应用生命周期。使用Promise异步回调。仅支持主线程调用。
  • setColorMode(colorMode: ConfigurationConstant.ColorMode): void:设置应用的颜色模式。仅支持主线程调用。
  • setLanguage(language: string): void:设置应用的语言。仅支持主线程调用
  • clearUpApplicationData(): Promise<void>:清理应用本身的数据,同时撤销应用向用户申请的权限。使用Promise异步回调。仅支持主线程调用。
  • clearUpApplicationData(callback: AsyncCallback<void>): void:清理应用本身的数据,同时撤销应用向用户申请的权限。使用callback异步回调。仅支持主线程调用。
  • restartApp(want: Want): void:应用重启并拉起自身指定UIAbility。重启时不会收到onDestroy回调。仅支持主线程调用,且待重启的应用需要处于获焦状态。
  • getCurrentAppCloneIndex(): number:获取当前应用的分身索引。
  • setFont(font: string): void:设置应用的字体类型。仅支持主线程调用。
  • setSupportedProcessCache(isSupported : boolean): void:应用设置自身是否支持缓存后快速启动。仅支持主线程调用。
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开始,该接口支持在元服务中使用。提供本领:

  • 启动Ability:startAbility、startAbilityForResult
  • 停止Ability自身:terminateSelf、terminateSelfWithResult
  • 将当前Ability毗连到一个ServiceExtensionAbility:connectServiceExtensionAbility
  • 断开与ServiceExtensionAbility的毗连,断开毗连之后需要将毗连成功时返回的remote对象置空:disconnectServiceExtensionAbility
  • 跨设备场景下,启动指定Ability至前台或后台,同时获取其Caller通信接口,调用方可使用Caller与被启动的Ability举行通信:startAbilityByCall
  • 设置UIAbility在使命中显示的名称:setMissionLabel
  • 设置UIAbility使命中流转状态:setMissionContinueState
  • 恢复UIAbility中的WindowStage数据:restoreWindowStage
  • 查询UIAbility是否在terminating状态:isTerminating
  • 启动一个支持模态弹框的ServiceExtensionAbility。ServiceExtensionAbility被启动后,应用弹出模态弹框,通过调用setRequestResult接口返回结果给调用者:requestDialogService
  • 当页面加载完成(loadContent成功)时,为开发者提供打点功能(callback形式):reportDrawnCompleted
  • 通过type隐式启动UIExtensionAbility。使用callback异步回调:startAbilityByType
  • 显示当前Ability:showAbility
  • 隐蔽当前Ability:hideAbility
  • 将处于前台的Ability移动到后台:moveAbilityToBackground
  • 跳出式启动EmbeddableUIAbility,并返回结果:openAtomicService
  • 通过AppLinking启动UIAbility:openLink
  • 当通过startAbilityForResult或openLink拉起目标方Ability,且需要目标方返回结果时,目标方可以通过该接口将结果返回并拉起调用方。与terminateSelfWithResult不同的是,本接口在返回时不会烧毁当前Ability:backToCallerAbilityWithResult
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主要可以使用在以下场景:


  • 获取应用文件路径
  • 获取和修改加密分区
  • 获取本应用中其他Module的Context
  • 订阅历程内UIAbility生命周期变化
以最典型的通过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直接关系与提供的属性和方法。
参考



  • BaseContext
  • Context
  • UIAbilityContext
  • ExtensionContext
  • AbilityStageContext

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表