多线程唯一单例中如何添加Uint8Array类型的参数 HarmonyOS 鸿蒙Next

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

多线程唯一单例中如何添加Uint8Array类型的参数 HarmonyOS 鸿蒙Next

多线程唯一单例中添加Uint8Array类型的参数 我们的应用,在主线程中创建3个Worker线程进行工作,同时使用共享模块开发,创建了多线程下唯一单例工具类UsbInfoUtil,实现了多线程共用相同的USB管道和节点,我目前的需要在这个工具类里添加一个名为OtgCallBack的class实例,实例里有个接口,在我工作线程中处理数据之后通过该实例返回数据给App,目前存在的障碍是,我有一个Uint8Array类型的变量(public data: Uint8Array),我通过usb获取摄像头数据并处理,处理完就填充进data,并在接口回调,我的App就能实时渲染,但是报错Properties in “Sendable” classes and interfaces must have a Sendable data type。

2 回复

sendable支持的数据类型有限制的,可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-sendable-V5#sendable装饰器声明并校验sendable-class

array只能用collections.Array。

目前测场景,可以用string来定义data,作为中转一下,单例中定义如下方法来设置和读取,这个思路参考一下

public setData(u8arr:Uint8Array){

    this.data = uint8ArrayToString(u8arr)

  }

  public getData():Promise<Uint8Array>{

    return stringToUint8Array(this.data)

  }

在HarmonyOS鸿蒙Next系统中,实现多线程唯一单例并添加Uint8Array类型的参数,可以通过以下步骤进行:

  1. 定义单例类:使用静态内部类或者枚举单例模式确保单例在多线程环境下的唯一性。

  2. 线程安全:使用synchronized关键字或者java.util.concurrent包中的锁机制(如ReentrantLock)来保证单例的创建过程是线程安全的。

  3. 添加Uint8Array参数:由于Java中没有直接的Uint8Array类型,你可以使用byte[]来替代,因为byte在Java中占用8位,与Uint8在C/C++中的定义一致。

  4. 构造函数或初始化方法:在单例的构造函数或初始化方法中,添加接受byte[]参数的逻辑。

示例代码:

public class MySingleton {
    private static volatile MySingleton instance;
    private byte[] uint8Array;

    private MySingleton(byte[] uint8Array) {
        this.uint8Array = uint8Array;
    }

    public static synchronized MySingleton getInstance(byte[] uint8Array) {
        if (instance == null) {
            instance = new MySingleton(uint8Array);
        }
        return instance;
    }

    // 其他方法...
}

以上代码展示了如何创建一个线程安全的单例,并在构造时接受byte[]类型的参数。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部