鸿蒙Next应用上下文Context总结 原创

auhgnixgnahz
发布于 2025-7-20 15:16
浏览
0收藏

在开发中,通过会涉及到不同的Context,比如要监听应用的前后台状态变化需要用到ApplicationContext,启动一个ability需要用到UIAbilityContext,配置键盘避让模式需要用到UIContext,今天总结一下各个context的作用和区别。

ApplicationContext

ApplicationContext模块继承自Context,为开发者提供应用级别的上下文的能力
// 1.通过context属性获取applicationContext
let applicationContext = this.context.getApplicationContext();
//注册对当前应用前后台状态变化的监听
try {
  // 2.通过applicationContext注册应用前后台状态监听
  applicationContext.on('applicationStateChange', {
    onApplicationForeground() {},
    onApplicationBackground() {}
  });
} catch (paramError) {}
//3.获取有关运行进程的信息
applicationContext.getRunningProcessInformation().then((data) => {
//pid   进程ID。
//uid   用户ID
//processName  进程名称
//bundleNames  进程中所有运行的Bundle名称
//state   当前进程状态
}).catch((error: BusinessError) => {
});
//4.终止应用的所有进程
applicationContext.killAllProcesses();
//5.设置应用的深浅色模式。仅支持主线程调用
applicationContext.setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);

AbilityStageContext

AbilityStageContext是AbilityStage的上下文环境,继承自Context,提供允许访问特定于abilityStage的资源的能力,获取HapModuleInfo、Configuration信息
let abilityStageContext = this.context;
// 获取当前模块名
let name = abilityStageContext.currentHapModuleInfo.name;
// 获取当前模块语言
let language = abilityStageContext.config.language;

HapModuleInfo

名称 说明
name 模块名称
icon 模块图标
iconId 模块图标的资源id值
label 模块标签
labelId 模块标签的资源id值
description 模块描述信息
descriptionId 描述信息的资源id值
mainElementName 当前模块的入口UIAbility名称
abilitiesInfo Ability信息
Configuration
名称 说明
language 表示应用程序的当前语言,例如“zh"
colorMode 表示深浅色模式
direction 表示屏幕方向
screenDensity 表示屏幕像素密度
displayId 表示应用所在的物理屏幕ID
hasPointerDevice 指针类型设备是否已连接,如键鼠、触控板

UIAbilityContext

UIAbilityContext是UIAbility组件的上下文,继承自Context。获取组件信息AbilityInfo、获取应用信息ApplicationInfo、拉起其他UIAbility、连接系统服务、销毁UIAbility等
//Ability中获取
this.context
//UI组件中获取
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;

//启动一个Ability
startAbility(want: Want, options?: StartOptions)
//启动一个UIAbility,并通过回调函数接收被拉起的UIAbility退出时的返回结果
startAbilityForResult(want: Want, options: StartOptions, callback: AsyncCallback<AbilityResult>)
//设置UIAbility任务的流转状态
setMissionContinueState(state: AbilityConstant.ContinueState, callback: AsyncCallback<void>)
//启动一个支持模态弹框的ServiceExtensionAbility
requestDialogService(want: Want, result: AsyncCallback<dialogRequest.RequestResult>)
//销毁UIAbility自身
terminateSelf(callback: AsyncCallback<void>)

UIContext

ArkUI的UI实例上下文,提供UI操作相关的能力
//在存在Window实例的情况下
onWindowStageCreate(windowStage: window.WindowStage): void {
  this.uiContext= windowStage.getMainWindowSync().getUIContext()
}
//在UI组件内获取
uiContext = this.getUIContext()
//获取组件大小、位置、平移、缩放、旋转及仿射矩阵属性信息。
let componentUtils: ComponentUtils = uiContext.getComponentUtils();
let modePosition = componentUtils.getRectangleById("onClick");
let localOffsetWidth = modePosition.size.width;
let localOffsetHeight = modePosition.size.height;
let localOffsetX = modePosition.localOffset.x;// 获取组件相对于父组件的x轴偏移
let localOffsetY = modePosition.localOffset.y;// 获取组件相对于父组件的y轴偏移
//获取到PromptAction对象
let promptAction: PromptAction = uiContext.getPromptAction();
//创建并显示文本提示框
promptAction.showToast(options: promptAction.ShowToastOptions)
//创建并显示对话框
promptAction.showDialog(options: promptAction.ShowDialogOptions)
//创建并显示操作菜单
promptAction.showActionMenu(options: promptAction.ActionMenuOptions)
//创建并弹出自定义弹窗
promptAction.openCustomDialog(options: promptAction.CustomDialogOptions)
//显示警告弹窗组件
uiContext.showAlertDialog(options: AlertDialogParamWithConfirm | AlertDialogParamWithButtons | AlertDialogParamWithOptions)
//定义列表弹窗并弹出
uiContext.showActionSheet(value: ActionSheetOptions)
//定义日期滑动选择器弹窗并弹出
uiContext.showDatePickerDialog(options: DatePickerDialogOptions)
//定义时间滑动选择器弹窗并弹出
uiContext.showTimePickerDialog(options: TimePickerDialogOptions)
//定义文本滑动选择器弹窗并弹出
uiContext.showTextPickerDialog(options: TextPickerDialogOptions)
//配置虚拟键盘弹出时,页面的避让模式
uiContext.setKeyboardAvoidMode(value: KeyboardAvoidMode)
//获取Router对象
uiContext.getRouter();
//代码控制弹出软键盘
this.getUIContext().getFocusController().requestFocus('指定输入框id');
//代码控制收起软键盘
this.getUIContext().getFocusController().clearFocus();
//返回当前组件所在Ability的Context,在UIAbility窗口中的页面调用该接口,返回类型为UIAbilityContext
this.getUIContext().getHostContext()
//计算指定文本单行布局下的宽度
this.uiContext.getMeasureUtils().measureText(options: MeasureOptions)

不同类型Context的继承关系

鸿蒙Next应用上下文Context总结-鸿蒙开发者社区

不同类型Context的持有关系

鸿蒙Next应用上下文Context总结-鸿蒙开发者社区

注意:

UIContext是指UI实例上下文,用于关联窗口与UI页面。与本文档中的应用上下文Context无直接关联,不存在继承或持有关系

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
    相关推荐