事件總線模式是一種廣泛運用於安卓開發之中的一種軟件架構模式,而事件總線模式在安卓開發中最廣泛的應用莫過於AndroidStudio提供的EventBus,所以我就EventBus來談談對事件總線模式的認識。
EventBus是Android下高效的發布/訂閱事件總線機制。作用是可以代替傳統的Intent,Handler,Broadcast或接口函數在Fragment,Activity,Service,線程之間傳遞數據,執行方法。特點是代碼簡潔,是一種發布訂閱設計模式(Publish/Subsribe),或稱作觀察者設計模式。我們可能對事物總線機制還是有點陌生,但是想必對23種軟件設計模式之后的觀察者模式應該很熟悉。事物總線模式就是觀察者設計模式的一種,它的工作部件主要分為四種:事件源、事件監聽器、通道和事件總線。它的主要工作原理:事件源將產生的消息發送到事件總線的特定通道之上,然后監聽器在事先會訂閱事務總線之中不同的通道以區分消息的響應,然后當消息被發送到事務總線的特定通道之中時,所對應的監聽器會監聽到消息,然后監聽器根據程序中設置的響應函數進行執行。就好像一個Activity之中設置的Button一樣,在xml文件中放入一個Button,然后在java類中設定OnEvent()函數,當Button被點擊的時候,則會傳出一個點擊消息,然后按鈕對應的Onclick()函數,監聽到點擊消息,從而執行OnListerner()之中的函數。其大致工作原理圖如下:
介紹完EventBus,那么它的好處和優點主要體現在哪個方面呢?
(1)調度靈活。不依賴於 Context,使用時無需像廣播一樣關注 Context 的注入與傳遞。父類對於通知的監聽和處理可以繼承給子類,這對於簡化代碼至關重要;通知的優先級,能夠保證 Subscriber 關注最重要的通知;粘滯事件(sticky events)能夠保證通知不會因 Subscriber 的不在場而忽略。可繼承、優先級、粘滯,是 EventBus 比之於廣播、觀察者等方式最大的優點,它們使得創建結構良好組織緊密的通知系統成為可能。
(2)使用簡單。EventBus 的 Subscriber 注冊非常簡單,調用 eventBus 對象的 register 方法即可,如果不想創建 eventBus 還可以直接調用靜態方法 EventBus.getDefault() 獲取默認實例,Subscriber 接收到通知之后的操作放在 onEvent 方法里就行了。成為 Publisher 的過程就更簡單了,只需要調用合適的 eventBus(自己創建的或是默認的)的 post 方法即可。
(3)快速且輕量。作為 github 的明星項目之一, EventBus 的源代碼中有許多技巧來改善性能。
這就是我對事件總線這個設計模式的認識和理解。