请教下CH9140蓝牙定时发送数据的问题,多谢!

我有Ch9140弄了个蓝牙转485的板子,现在有需求需要多个定时发送数据,参照“BleUartLib”中Android中的例程,发现用“TYPE_TIMING”方式进行发送就行。

但现在的问题是,“TYPE_TIMING”方式发送只有第1个生效,其它的都发送不出去,请问下是什么原因导致的?要如何解决?

谢谢指导!


定时发送问题.jpg

Demo中的定时发送使用的是AsyncTask。同一个进程下,所有AsyncTask任务都会到达同一个队列,也就是说只有上一个AsyncTask执行完,下一个才会执行。所以您这边的第一个调用有效,第二个没有生效。

解决方发:不使用AsyncTask,可以使用Rxjava/kotlin协程/线程池,也可以新建两个线程处理发送。

如有问题可以直接联系我:zhangpc@wch.cn


谢谢大神的指导!

我重写了TimerTask类为MyTimerTask,在该类的doInBackground()中处理多个数据的定时发送,执行myTimingTask.execute()时传递进去了BytesTaskBean数组,现在暂时解决了问题。

-----------------------------------------------

对于CH9140蓝牙芯片我还有一个疑问,就是调用CH9140BluetoothManager.getInstance().write()发送数据时,需要考虑时间间隔吗?还是说我发完1个就可以立马发送第2个。

下面的代码会有问题吗,能不能保证data1和data2都正常通过CH9140发送出去(如不能需怎样改写):

new Thread(){

public void run() {

CH9140BluetoothManager.getInstance().write(data1,data1.length);

}

}.start();


new Thread(){

public void run() {

CH9140BluetoothManager.getInstance().write(data2,data2.length);

}

}.start();


我测试程序时发现,同时发蓝牙数据时经常导致程序崩溃(比如后台有一个定时发送数据的Task,现在又需要单发一条,可能刚好碰上后台定时任务也正在发送数据),请问要如何解决?


1.我们提供的写数据的api,都是写完成后才返回的,可以连续发送不需要时间间隔

2.请尽量避免使用多线程同时发送数据,会造成多个线程抢占手机蓝牙芯片驱动,大概率发送失败

3.TimeTask也是基于线程池实现的,同时发送发生也会冲突

4.可以使用Lock锁或者Sync关键字,确保同时只会有一个线程调用发送函数。

如有问题可以直接联系我:zhangpc@wch.cn



只有登录才能回复,可以选择微信账号登录