HarmonyOS TaskPool中如何获取context?

如题:HarmonyOS TaskPool中如何获取context?

阅读 614
1 个回答

多线程或者多har包情况下可使用sendablePreferences,参考示例如下:

import { Context } from '@kit.AbilityKit';
import { sendablePreferences } from '@kit.ArkData';
import { lang } from '@kit.ArkTS';

export class PreferenceUtil {
  private pref: sendablePreferences.Preferences | undefined = undefined
  private static instance: PreferenceUtil;

  public static getInstance(): PreferenceUtil {
    if (PreferenceUtil.instance == null) {
      PreferenceUtil.instance = new PreferenceUtil();
      console.debug('PreferenceUtil getInstance  new  ')
    }
    return PreferenceUtil.instance;
  }

  loadPreference(context: Context, storeName: string) {
    try { // 加载preferences
      this.pref = sendablePreferences.getPreferencesSync(context, { name: storeName })
      console.debug(`加载Preferences成功`)
    } catch (e) {
      console.info(`加载Preferences失败`, JSON.stringify(e))
    }
  }

  async putPreferenceValue(key: string, value: lang.ISendable) {
    if (!this.pref) {
      console.debug(`Preferences 尚未初始化!`)
      return
    }
    try {
      // 写入数据
      this.pref.putSync(key, value)
      // 刷盘
      await this.pref.flush()
      console.debug(`保存Preferences[${key} = ${value}]成功`)
    } catch (e) {
      console.debug(`保存Preferences[${key} = ${value}]失败`, JSON.stringify(e))
    }
  }

  async getPreferenceValue(key: string, defaultValue: lang.ISendable) {
    if (!this.pref) {
      console.debug(`Preferences 尚未初始化!`)
      return
    }
    try {
      // 读数据
      let value = this.pref.getSync(key, defaultValue)
      console.debug(`读取Preferences[${key} = ${value}]成功`)
      return value
    } catch (e) {
      console.debug(`读取Preferences[${key}]失败`, JSON.stringify(e))
      return
    }
  }
}

只要在启动的时候初始化一次就可以了。

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  PreferenceUtil.getInstance().loadPreference(this.context,'moreStore')
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进