Android 設計-4 藍牙
開始設計 BluetoothService 上一篇我們主要是把 Bluetooth 設備找出來,然後啟動它。為了程式的包裝,所以我們用了一點技巧,直接在 onStart() 執行,對於 Android 來說它強調 Activity / Fragment 的生命週期,所以你不可不知,你的程式該擺在哪個位置。 我們的 BluetoothEnable 沒有 extented Android 的類別,同樣的 BluetoothService 也沒有。首先我們還是取材自 BluetoothChatService,請自行下載 Android 的 BluetoothChat 範例,我直接口頭說明。 簡單分析一下,BluetoothChatService,它建立三個 Thread 分別是 ConnectThread,ConnectedThread,AcceptThread,然後一大堆的 synchronized 綁來綁去。對 Java 菜鳥來說可能搞到最後還是搞不清楚,何時用 Thread vs. Runnable,何時用 synchronized? 我也搞不清楚?! 然後在為了避免與 UI 顯示衝突,藉由 handle 傳送資料。通常在寫 windows 的 API 上很常見,阿貝已經有 N 年沒寫 Windows API 了,這是年輕人的宿命,阿貝老了。 Java 為了 JVM 創造出一些多工 (multiTasking) 的方法,其中大家最常用的就是 Thread 及 Runnable,兩個差別在哪裡,簡單來說一個是 Abstract Class,一個是 Interface Class。哪裡用 Abstract,何處用 Interface? 說實在,見仁見智,因為一個物件的定義,沒有一定的規律,你可以把 車輛 Vehicle 定義成 Abstract 然後保留空間給 車廠名稱 FactoryName ,依此類推。你也可以當作 Interface 然後保留 車輛顏色 CarColor , 給車種。都是看你當時的系統設計原理而定。不要告訴我,什麼是 Interface 什麼是 Abstract 你不懂,那你就只是個程式員,要加油了。 至於多工?那就跳過吧,我們要從計算機概論開始了解,就很累