HarmonyOS鸿蒙Next中TaskPool执行的异步任务方法里面获取全局变量是没有值的

HarmonyOS鸿蒙Next中TaskPool执行的异步任务方法里面获取全局变量是没有值的

状态栏工具类

class StatusUtils {
  /**
   * 状态栏高度
   */
  statusBarHeight = 0;
  /**
   * 任务栏高度
   */
  navigationBarHeight = 0;

  /**
   * 设置沉侵式状态栏
   * 初始化缓存状态栏高度和任务栏高度
   * @param windowStage windowStage
   */
  initStatusBarAndNavigationBar(windowStage: window.WindowStage) {
    windowStage.getMainWindow((err, mainWindow: window.Window) => {
      if (err.code) {
        return
      }
      // 创建颜色透明
      let SystemBarProperties = {
        statusBarColor: '#00000000',
        navigationBarColor: '#00000000',
      }
      mainWindow.setWindowLayoutFullScreen(true);
      // 启动状态栏,意思是隐藏任务栏
      mainWindow.setWindowSystemBarEnable(['status']);
      // 设置颜色
      mainWindow.setWindowSystemBarProperties(SystemBarProperties, () => {

      })

      // 获取高度,用于后续padding这些高度
      let avoidArea: window.AvoidArea = mainWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)
      // px2vp目前Api9在Ability无效,暂时自己计算
      this.statusBarHeight = avoidArea.topRect.height / display.getDefaultDisplaySync().densityPixels
      this.navigationBarHeight = avoidArea.bottomRect.height / display.getDefaultDisplaySync().densityPixels
    });
  }
}

let statusUtils = new StatusUtils();

export default statusUtils as StatusUtils;

然后在某个地方使用TaskPool.execute(),里面用到statusBarHeight,没有传过去,而是在异步任务里面使用StatusUtils.statusBarHeight,但是获取是为默认值0,想问下怎么做合适?不能通过传值,因为是有很多很多值,根据条件判断使用某个工具类的


更多关于HarmonyOS鸿蒙Next中TaskPool执行的异步任务方法里面获取全局变量是没有值的的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

好像要设置@Sendable为共享类,但是API11才有的,找了好久才有这个资料,现在文档demo各种割裂,又API9又API11的,太误导人了。关键又一直申请不了next开发版

更多关于HarmonyOS鸿蒙Next中TaskPool执行的异步任务方法里面获取全局变量是没有值的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,TaskPool用于执行异步任务,任务在独立的线程中运行。由于TaskPool的任务是在不同的线程中执行的,因此无法直接访问主线程中的全局变量。这是因为线程之间的内存空间是隔离的,全局变量在主线程中初始化,但在TaskPool的任务线程中不可见。

要解决这个问题,可以通过以下方式传递数据:

  1. 通过任务参数传递:在创建TaskPool任务时,将需要的全局变量作为参数传递给任务函数。任务函数可以通过参数访问这些数据。

  2. 使用线程间通信机制:通过EventBus、Emitter等线程间通信机制,在主线程和TaskPool任务线程之间传递数据。

  3. 使用共享内存:通过SharedMemory等机制,在主线程和TaskPool任务线程之间共享数据。

  4. 使用TaskPool的上下文传递:在某些情况下,可以通过TaskPool的上下文传递机制,将数据传递给任务线程。

总之,TaskPool任务中无法直接访问主线程的全局变量,需要通过参数传递、线程间通信或共享内存等方式获取数据。

在HarmonyOS鸿蒙Next中,TaskPool执行的异步任务方法无法直接访问全局变量,因为TaskPool运行在独立的线程中,与主线程隔离。要解决这个问题,可以通过以下方式传递数据:

  1. 参数传递:将全局变量作为参数传递给异步任务方法。
  2. EventBus/消息机制:使用事件总线或消息机制在任务间传递数据。
  3. 共享内存:通过SharedPreferences或数据库等共享存储方式访问数据。

确保数据传递的线程安全性,避免并发问题。

回到顶部