理解鸿蒙app 开发中的 context

是什么

Context是应用中对象的上下文 ,其提供了应用的一些基础信息,例如resourceManager资源管理 )、applicationInfo当前应用信息 )、dir应用文件路径 )、area文件分区 )等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContextAbilityStageContextUIAbilityContextExtensionContext、ServiceExtensionContext等Context。(应用上下文(Context)是应用程序的全局信息的接口。它是一个抽象类,提供了访问应用程序环境的方法和资源的方法 总而言之,Context提供了访问应用程序资源和服务的接口。

  • 各类Context的继承关系

各类Context的持有关系

如何获取 context

在具体的页面中获取 context 就使用 getcontext(this)

如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。

TypeScript 复制代码
//pages/Index.ets
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            // 建议使用this.getUIContext().getHostContext()
            let context : Context = getContext(this) as Context
            console.info("CacheDir:" + context.cacheDir)
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

说明:如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext

getContext传入this和不传入有什么区别

getContext参数及类型:getContext(component?: Object):Context。

Context传入参数component的作用是指定一个组件对象,getContext函数会返回这个组件的上下文对象Context。如果不传入参数,则默认返回当前组件的上下文对象。上下文对象Context包含了组件的状态、属性、方法等信息,可以在组件内部使用。

在某些场景下,可能需要在组件内部调用其他组件的方法或获取其他组件的属性,此时可以通过getContext(this)获取到当前组件的上下文对象,然后使用该上下文对象调用其他组件的方法或获取其他组件的属性

获取UIAbility的上下文信息

UIAbility类拥有自身的上下文信息,该信息为UIAbilityContext类的实例,UIAbilityContext拥有abilityInfo、currentHapModuleInfo等属性。通过UIAbilityContext可以获取UIAbility的相关配置信息,如包代码路径、Bundle名称、Ability名称和应用程序需要的环境状态等属性信息 ,以及可以获取操作UIAbility实例的方法(如startAbility()connectServiceExtensionAbility()terminateSelf()等)。

如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的 UIAbilityContext或ExtensionContext

  • UIAbility中可以通过this.context获取UIAbility实例的上下文信息。

TypeScript 复制代码
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 获取UIAbility实例的上下文
    let context = this.context;
//将 context   存进去 
AppStorage.setOrCreate('EntryAbilityContext', this.context);
    // ...
  }
}

注意 !!!!在生明的类里面 拿到context 方式 最好使用这种方式

TypeScript 复制代码
export class appOptionModel {
//  使用在 entry  里面存储的   EntryAbilityContext   这样才行  
context: common.UIAbilityContext | undefined = AppStorage.get('EntryAbilityContext'); // 获取UIAbilityContext

}
相关推荐
2501_9437823517 小时前
【共创季稿事节】摇骰子:用 ArkTS 实现随机动画与交互反馈
运维·nginx·交互·harmonyos·鸿蒙·鸿蒙系统
zjxcq52017 小时前
【共创季稿事节】鸿蒙原生ArkTS布局之道——layoutWeight权重分配机制深度解析
华为·harmonyos
2501_9437823520 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
想你依然心痛20 小时前
AtomCode 在 HarmonyOS 开发环境中的表现测评
跨平台·harmonyos·arkts·信创·国产系统
2501_9437823521 小时前
【共创季稿事节】 倒计时器:时分秒选择器与定时器的协同工作
前端·华为·harmonyos·鸿蒙·鸿蒙系统
TrisighT21 小时前
Electron 鸿蒙 PC 上做本地搜索,Fuse.js 比 SQLite 快 6 倍——但我愣是选了最慢的方案
electron·sqlite·harmonyos
独守一片天21 小时前
HarmonyOS 6.1.0 Call Service 来电识别与安全通信怎么设计?
安全·华为·harmonyos
AI创界者1 天前
【硬核教程】鸿蒙 HarmonyOS 4.2 / 4.3 完美配置 GMS 运行环境(纯净版/不弹窗/全机型通用)
华为·harmonyos
2501_942389551 天前
小米寥寥几家车企设计汽车顶棚
华为·编辑器·时序数据库·harmonyos
2501_943782351 天前
【共创季稿事节】摩斯电码转换器:编码表与双向转换的实现
android·华为·鸿蒙·鸿蒙系统