請教下CH9140藍牙定時發(fā)送數(shù)據(jù)的問題,多謝!

我有Ch9140弄了個藍牙轉(zhuǎn)485的板子,現(xiàn)在有需求需要多個定時發(fā)送數(shù)據(jù),參照“BleUartLib”中Android中的例程,發(fā)現(xiàn)用“TYPE_TIMING”方式進行發(fā)送就行。

但現(xiàn)在的問題是,“TYPE_TIMING”方式發(fā)送只有第1個生效,其它的都發(fā)送不出去,請問下是什么原因?qū)е碌??要如何解決?

謝謝指導(dǎo)!


定時發(fā)送問題.jpg

Demo中的定時發(fā)送使用的是AsyncTask。同一個進程下,所有AsyncTask任務(wù)都會到達同一個隊列,也就是說只有上一個AsyncTask執(zhí)行完,下一個才會執(zhí)行。所以您這邊的第一個調(diào)用有效,第二個沒有生效。

解決方發(fā):不使用AsyncTask,可以使用Rxjava/kotlin協(xié)程/線程池,也可以新建兩個線程處理發(fā)送。

如有問題可以直接聯(lián)系我:zhangpc@wch.cn


謝謝大神的指導(dǎo)!

我重寫了TimerTask類為MyTimerTask,在該類的doInBackground()中處理多個數(shù)據(jù)的定時發(fā)送,執(zhí)行myTimingTask.execute()時傳遞進去了BytesTaskBean數(shù)組,現(xiàn)在暫時解決了問題。

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

對于CH9140藍牙芯片我還有一個疑問,就是調(diào)用CH9140BluetoothManager.getInstance().write()發(fā)送數(shù)據(jù)時,需要考慮時間間隔嗎?還是說我發(fā)完1個就可以立馬發(fā)送第2個。

下面的代碼會有問題嗎,能不能保證data1和data2都正常通過CH9140發(fā)送出去(如不能需怎樣改寫):

new Thread(){

public void run() {

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

}

}.start();


new Thread(){

public void run() {

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

}

}.start();


我測試程序時發(fā)現(xiàn),同時發(fā)藍牙數(shù)據(jù)時經(jīng)常導(dǎo)致程序崩潰(比如后臺有一個定時發(fā)送數(shù)據(jù)的Task,現(xiàn)在又需要單發(fā)一條,可能剛好碰上后臺定時任務(wù)也正在發(fā)送數(shù)據(jù)),請問要如何解決?


1.我們提供的寫數(shù)據(jù)的api,都是寫完成后才返回的,可以連續(xù)發(fā)送不需要時間間隔

2.請盡量避免使用多線程同時發(fā)送數(shù)據(jù),會造成多個線程搶占手機藍牙芯片驅(qū)動,大概率發(fā)送失敗

3.TimeTask也是基于線程池實現(xiàn)的,同時發(fā)送發(fā)生也會沖突

4.可以使用Lock鎖或者Sync關(guān)鍵字,確保同時只會有一個線程調(diào)用發(fā)送函數(shù)。

如有問題可以直接聯(lián)系我:zhangpc@wch.cn



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频