背景
不管是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获取字符串资源为例:
- static getStringSync(context: common.Context | undefined, resource: Resource): string {
- let rscManager = (context ?? getContext() as common.UIAbilityContext).resourceManager;
- return rscManager.getStringSync(resource.id)
- }
复制代码 这里需要Context,我们在一般类中getContext获取到的Context是什么呢?
在页面中我们通过getContext与getUIContext查看获取的Context类型,分别为AbilityContext与UIContext:
在viewmodel中getContext拿到的也是同一个AbitlityContext:
总结
本文详细先容了HarmonyOS Next中各种Context直接关系与提供的属性和方法。
参考
- BaseContext
- Context
- UIAbilityContext
- ExtensionContext
- AbilityStageContext
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |