認識鴻蒙Context

龙儿筝發表於2024-11-05

Context是應用中物件的上下文,其提供了應用的一些基礎資訊,例如resourceManager(資源管理)、applicationInfo(當前應用資訊)、dir(應用檔案路徑)、area(檔案分割槽)等,以及應用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility元件和各種ExtensionAbility派生類元件都有各自不同的Context類。分別有基類Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context。

Context繼承關係

img1

獲取UIAbilityContext

每個UIAbility中都包含了一個Context屬性,提供操作應用元件、獲取應用元件的配置資訊等能力

import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    let uiAbilityContext = this.context;
    //...
  }
}

獲取特定場景ExtensionContext

以ServiceExtensionContext為例,表示後臺服務的上下文環境,繼承自ExtensionContext,提供後臺服務相關的介面能力。

import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';

export default class ServiceExtAbility extends ServiceExtensionAbility {
  onCreate(want: Want) {
    let serviceExtensionContext = this.context;
    //...
  }
}

獲取AbilityStageContext

Module級別的Context,和基類Context相比,額外提供HapModuleInfo、Configuration等資訊

import { AbilityStage } from '@kit.AbilityKit';

export default class MyAbilityStage extends AbilityStage {
  onCreate(): void {
    let abilityStageContext = this.context;
    //...
  }
}

獲取ApplicationContext

應用級別的Context。ApplicationContext在基類Context的基礎上提供了訂閱應用內應用元件的生命週期的變化、訂閱系統記憶體變化和訂閱應用內系統環境的變化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以獲取。

import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    let applicationContext = this.context.getApplicationContext();
    //...
  }
}