高度抽換性的系統設計
圖 ㄧ
Service 與其子類 + Binder 與其子類是引擎,接在myJigbeeAdapter 後面的JigbeeAppData則是輪子。
使用者介面所在的Activity、推動整個機制的引擎,與輪子,彼此間應保持獨立,要抽換任一個,都不會影響其餘兩個,使之具有高度抽換性。:
接下來看看,引擎如何運轉。
所有文章
http://ithelp.ithome.com.tw/category/家庭雲
圖 二
上圖二紅色框內程式區塊獨立於所有Activity函式,所以一開始會產生一個ServiceConnection的物件,將這參考值儲存在 mConnection。而上圖二綠色框內是位於 Actuvity ac01 的onCreate()函式,bindService()的呼叫,會產生誕生一個Intent物件,並與剛剛產生的ServiceConnection物件的參考(就是mConnection)一併送給Android 系統,Android 會依此Intent的參數 com.google.android.ZigbeeApp.REMOTE_SERVICE (這在我昨天的PO文第一張圖裏)找出 適合的Service之後,參考下面圖三與圖四Android 會呼叫 Service內的onBind(),而獲得IBinder 的參考值。
圖 三
圖 四
Android 會拿這IBinder的參考值,當參數呼叫 上圖二紅色框內ac01內的onServiceConnection(),如此便把 IBinder 參考傳遞給 ac01(就是上圖二紅色框內 ib 是宣告在ac01 型態爲iBinder的變數) 。參考圖三, 當 ac01 取得IBinder的參考後,便能以 IBinder的參考變數(ib)呼叫 Binders內的transact() ,進而呼叫到myJigbeeAdapter 內的onTransact(),而onTransact() 函式就會呼叫 Class JigbeeAppData內的成員函式getAppDate()了,來操作 Zigbee 的資料了,如圖五。
圖五
所有文章
http://ithelp.ithome.com.tw/category/家庭雲