HarmonyOS鸿蒙Next中封装一个公用的getContext()

HarmonyOS鸿蒙Next中封装一个公用的getContext() 封装一个公用的export const context = getContext(),有例子嘛

3 回复
import { Context } from '@kit.AbilityKit';

export class GlobalContext {
  private constructor() {}
  private static instance: GlobalContext;
  private context:Context | undefined

  public static getInstance(): GlobalContext {
    if (!GlobalContext.instance) {
      GlobalContext.instance = new GlobalContext();
    }
    return GlobalContext.instance;
  }

  setContext(contex:Context){
    this.context = contex
  }

  getContext(): Context | undefined {
    return this.context
  }

}

在EntryAbility初始化设置context

async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  GlobalContext.getInstance().setContext(getContext(this));
}

更多关于HarmonyOS鸿蒙Next中封装一个公用的getContext()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,封装一个公用的getContext()方法可以通过以下方式实现。首先,创建一个单例类或工具类来管理全局的Context对象。可以使用AbilityAbilitySlice中的getContext()方法来获取当前上下文的引用,并将其存储在全局变量中。例如:

// GlobalContext.ts
export class GlobalContext {
    private static instance: GlobalContext;
    private context: Context | null = null;

    private constructor() {}

    public static getInstance(): GlobalContext {
        if (!GlobalContext.instance) {
            GlobalContext.instance = new GlobalContext();
        }
        return GlobalContext.instance;
    }

    public setContext(context: Context): void {
        this.context = context;
    }

    public getContext(): Context | null {
        return this.context;
    }
}

AbilityAbilitySlice中初始化时,调用setContext()方法设置全局Context

// MainAbility.ts
import { GlobalContext } from './GlobalContext';

export default class MainAbility extends Ability {
    onCreate(want, launchParam) {
        GlobalContext.getInstance().setContext(this.context);
    }
}

在其他地方需要获取Context时,调用GlobalContext.getInstance().getContext()即可。这种方式确保了全局Context的唯一性和可访问性。

在HarmonyOS(鸿蒙)Next中,可以通过封装一个公用的getContext()方法来获取全局上下文。以下是一个简单的实现示例:

public class ContextUtil {
    private static Context context;

    public static void init(Context appContext) {
        context = appContext;
    }

    public static Context getContext() {
        if (context == null) {
            throw new IllegalStateException("ContextUtil未初始化,请先调用init方法");
        }
        return context;
    }
}

使用时,首先在应用启动时调用ContextUtil.init()初始化上下文,之后即可通过ContextUtil.getContext()获取全局上下文。

回到顶部