但是像我們要使用藍芽來溝通, 連線時, Server端不就是一直在那兒等, 當然是在死迴圈裡執行, 等候遠方的訊息傳來時, 再傳給Server的主線程去顯示傳來的訊息, 在Android就只能用Thread(執行緒), 就很像是找另一個專人來負責這個死迴圈, 只是申請這個人的程序有點煩, 藍芽結束連線後, 要解僱這個人也是煩, 到處都有陷阱, 如果用完後沒有順利的把它解僱, 下次再執行, 藍芽就會怪里怪氣的, 時好時不好, 讓你煩到底, 因為自己遇到了, 所以就把它寫下來記綠一下
步驟(1)先宣告一個死迴圈的執行條件旗標
boolean mAcceptThread = true;
步驟(2)把你的Thread裡的迴圈條件加上剛才宣告的迴圈執行條件旗標
while (mAcceptThread) {
...
while (mAcceptThread) {
...
...
//你的死迴圈內容
//你的死迴圈內容
...
...
}
步驟(3)在程式要結束時, 執行中斷執行緒
}
步驟(3)在程式要結束時, 執行中斷執行緒
protected void onDestroy() {
if(mAcceptThread != null ) {
mAcceptThread.cancel(); //取消執行緒
mAcceptThread = false; //把迴圈執行條件旗標變成false, 這樣死迴圈就不執行了
mAcceptThread.interrupt(); //再中斷一下執行緒, 讓迴圈執行條件旗標發揮作用
mAcceptThread = null; //最後讓執行緒 = null
}
}
}
在debug時, 可以用下列程式碼來取得執行緒到底是Runnable還是Terminated
State mAcceptThreadStatus = mAcceptThread.getState();
if(D) Log.d(TAG, "mAcceptThread state = " + mAcceptThreadStatus);
收工
沒有留言:
張貼留言
歡迎大家來討論交流一下~~~