我正在开发一个Android应用程序,它以高频率接收来自ble通知的数据,在屏幕上打印数据并将数据发送到其他外设。
这是我的情况:
onCharacteristicChanged回调接收一个名为的字节数组 在10hz“值”并在一些float和int变量中解压缩数据
与handlerThread关联的处理程序启动Runnable 每30hz。此runnable使用从值解压缩的变量, 将新数据保存在一些变量中并将sendbroadcastmessage保存到 UX
在上面的步骤中,我保存并使用float,double和int变量。
我害怕处理并发性,我正在考虑在步骤2和3中使用相同的handletraread来解决并发问题。但是当另一个通知到达时,我认为存在种族争议问题:/ < / p>
其他问题: oncharacteristicchanged在执行什么线程?
有关我的问题的更多信息: 在oncharacteristicchanged到新的字节数组(在10hz频率),我在变量中解包数据,在其他线程B(在30hz)使用这个数据做一些计算:sendbroadcast到ux并将结果保存在其他一些变量中;线程C使用线程B的结果,它做了一些其他的计算并在10hz处写入特性。
oncharacteristicchanged - &gt;线程B - &gt;线程C
但是我不能停止特征改变,因为我不知道它在哪个线程中执行..
你
答案 0 :(得分:1)
我不了解Android,但我做的是Java。我会尝试帮助你甚至不知道Android,所以让我们走吧!
&#34;在上面的步骤中,我保存并使用float,double和int变量。&#34;
首先,我开始使用线程安全变量,例如:AtomicInteger或将它们声明为volatile。
对于将通过多线程访问的所有方法,我要说它们使线程安全。我不知道在Android中是否有类Lock或关键字synchronized,但我从那里开始。
示例:
Lock lock = new ReentrantLock();
try {
lock.lock();
doYourWork();
} finally{
lock.unlock();
}
这是开始的方式......希望我帮助你一点甚至不知道Android,对不起,如果我说错了。