簡體   English   中英

Android藍牙InputStream.read()一直處於停滯狀態

[英]Android Bluetooth InputStream.read() Keeps Stalling

我正在使用InputStream通過藍牙從Arduino讀取數據。 我正在使用一個單獨的線程來執行此操作,因為它不會阻止UI線程。 此線程具有以下樣式的while循環:

while(!stop){

    int instruction = InputStream.read();

    switch(instruction){
         ... //processes data here
    }

}

有時,我需要停止此線程,而且至關重要的是,必須盡快完成此線程,因為我要求它在UI線程上停止。 為了停止線程,我將變量stop更改為true,因此從邏輯上講while循環應該完成並且線程應該退出。

當我將鼠標懸停在read函數上時,eclipse表示如果到達流的末尾,它將返回-1。 我的問題是這沒有發生。 如果未從傳感器接收到指令,則讀取功能將暫停,直到接收到某種指令為止。 因為流完成,它不應該返回-1嗎?

因為read()函數停滯了,所以我無法停止線程。 我會用thread.stop(); 但這已棄用且不穩定,因此我想避免這種情況。 我也嘗試過使用InputStream.available()在執行讀取之前查看是否有可用的內容,但是即使有字節可供讀取,它也會返回0。 有人有建議嗎?

您選擇的read()方法將阻塞,直到它讀取一個字節為止。 您可以通過關閉套接字或流來使其退出。 這將導致異常(您需要捕獲)。 僅供參考-您應該使用其他read()方法,該方法返回讀取的字節數。 您使用的更簡單的read()方法將為數據字節0xff和錯誤讀取返回-1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM