回复
     鸿蒙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的继承关系

不同类型Context的持有关系

注意:
UIContext是指UI实例上下文,用于关联窗口与UI页面。与本文档中的应用上下文Context无直接关联,不存在继承或持有关系
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
  标签 
   
        赞
        
 
        收藏 
      
 回复
  相关推荐
 



















