鸿蒙的 context 上下文
context,即上下文,访问应用资源,如文件、字符串、图片、布局等。启动 Ability、Service、Data 等组件。获取系统服务,如 Preferences、SensorManager 等。订阅生命周期等1,各种context继承关系:持有关系:2,获取方式不同UIAbilityContext 在 UIAbility 的 onCreate 时即可获取;
此文章内容兼容API12,使用harmony next应用开发
简介
context,即上下文,
- 访问应用资源,如文件、字符串、图片、布局等。
- 启动 Ability、Service、Data 等组件。
- 获取系统服务,如 Preferences、SensorManager 等。
- 订阅生命周期等
1,各种context
继承关系:
持有关系:
2,获取方式不同
- UIAbilityContext 在 UIAbility 的 onCreate 时即可获取;提供UIAbility的相关配置信息以及操作UIAbility和ServiceExtensionAbility的方法,如启动UIAbility,停止当前UIAbilityContext所属的UIAbility,启动、停止、连接、断开连接ServiceExtensionAbility等
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let uiAbilityContext = this.context;
}
}
- 取特定场景ExtensionContext,如 ServiceExtensionContext,同样在 onCreate 时获取
- 获取module级别的AbilityStageContext,同样onCreate 获取,比基类context多了HapModuleInfo、Configuration等信息
- 获取应用级别的ApplicationContext ,同样onCreate 获取,比基类context多了订阅应用内应用组件的生命周期的变化、订阅系统内存变化、订阅应用内系统环境变化、设置应用语言、设置应用颜色模式、权限等能立
2, 不同context有不同的属性和方法,并不完全一致
解答
1,子线程Worker中如何获取 context
aw : 将主线程的context 以postMessage参数的方式传输到work线程中
2,hsp 通过 getContext(this) 获取资源会报错; 因为其仅包含静态资源,本身没有上下文概念
aw: 先通过getContext()获取当前上下文,再通过createModuleContext()获取HSP模块的上下文,再获取HSP模块的resourceManager,然后再调用resourceManager的接口获取资源。
getContext()
.createModuleContext('library') //创建此包的上下文
.resourceManager
.getStringValue(ResManager.getDesc())
.then(value => {
console.log('getStringValue is ' + value);
this.message = 'getStringValue is ' + value;
})
.catch((err: BusinessError) => {
console.error('getStringValue promise error is ' + err);
});
3,har 和 hsp 包如何获得context
aw: 使用 createModuleContext(context: Context, moduleName: string) 获得本包的上下文
4,getContext(component?: Object):Context, 参数传与不传的区别
aw:入参是组件,传入组件则返回此组件的上下文; 若不传,则返回当前组件的上下文
上下文对象Context包含了组件的状态、属性、方法等信息
5,页面/组件中,如何获得当前Ability的Context,即 UIAbilityContext
aw: 可调用getContext接口获取当前页面关联的UIAbilityContext
6,工具类等非组件page中,如何获取context
aw: 无法获取,可使用 APPStorage 进行存取
更多推荐



所有评论(0)