Android消息通信之无所不能的第三方开源项目EventBus
Android消息通信之無所不能的第三方開源項(xiàng)目EventBus
在Android開發(fā)中,消息通信在開發(fā)過程中是比較重要但比較略微繁瑣的過程,比如,Activity與Fragment之間的消息通信,后臺(tái)Service與前臺(tái)Activity的消息通信,Fragment與Fragment之間的消息通信等等情況,Android本身提供的有完善的廣播、在Service中也有的Messenger、handler中處理message等等完備的解決方案,而第三方的開源庫EventBus同樣提供了幾乎無所不能、易于理解和使用的Android消息事件解決方案。
EventBus是github上的一個(gè)第三方開發(fā)庫,其在github上的項(xiàng)目主頁地址:https://github.com/greenrobot/EventBus
EventBus的消息模型是消息發(fā)布者/訂閱者機(jī)制。
使用EventBus之前需要到EventBus項(xiàng)目主頁上將庫項(xiàng)目(https://github.com/greenrobot/EventBus/tree/master/EventBus ,截止2015年10月26日更新時(shí)間,未來也許有變動(dòng))包拖下來,接著作為Eclipse的一個(gè)工程導(dǎo)入,然后作為Android的一個(gè)lib,在自己的項(xiàng)目中引用即可。
本文以一個(gè)簡單的代碼例子說明EventBus。附錄參考文章2、3、4說明了如何實(shí)現(xiàn)前臺(tái)Activity與后臺(tái)Service之間的消息通信,本文則在附錄參考文章4的基礎(chǔ)上改造,使用EventBus實(shí)現(xiàn)后臺(tái)Service往前臺(tái)Activity發(fā)送消息進(jìn)而實(shí)現(xiàn)通信。
先丟出本文代碼:
首先要定義一個(gè)自己的Event類,這個(gè)類可以隨意定義,里面包括自己想要在消息通信中傳遞的各種復(fù)雜數(shù)據(jù)結(jié)構(gòu),本文則簡單些,MyEvent.java:
前臺(tái)Activity:
后臺(tái)Service:
說明:
(1)EventBus是消息發(fā)布者(發(fā)送消息)/訂閱者(接收消息)模式。EventBus的消息發(fā)布十分靈活,可以在工程代碼中的任意位置發(fā)送消息。在本例中,EventBus在Service的onHandleIntent循環(huán)發(fā)布10條消息。EventBus 發(fā)布消息只需要一行代碼即可實(shí)現(xiàn):
EventBus.getDefault().post(event);
Event即為自己定義的類的實(shí)例。
(2)EventBus在接收消息的Activity(或Fragment)中初始化。在本例中是一個(gè)Activity接收消息,
首先,在Activity里面注冊EventBus,通常在Android的Activity(或者Fragment)的onCreate里面注冊,僅需一行代碼:
EventBus.getDefault().register(this);
類似于注冊一個(gè)消息監(jiān)聽Listener,完了不要忘記注銷EventBus,在onDestory里面
EventBus.getDefault().unregister(this);
(3)EventBus接收消息。
在Activity中根據(jù)代碼實(shí)際情況寫一個(gè)EventBus的消息接收函數(shù):
public void onEventMainThread(MyEvent event);
然后,只要EventBus發(fā)送消息,就可以在這里接收到。
?
EventBus的消息回調(diào)接收消息函數(shù)還有幾個(gè):
onEventMainThread:Main線程,這個(gè)與Android UI線程密切相關(guān),不要阻塞它!
onEventBackgroundThread:故名思議,后臺(tái)線程中接收處理。
onEventAsync:異步線程中接收處理。
附錄參考文章:
文章1:《Android Service簡介(系列1)》鏈接地址:http://blog.csdn.net/zhangphil/article/details/49373939
文章2:《Android Activity與Service數(shù)據(jù)交互:Binder、bindService(系列2)》鏈接地址:http://blog.csdn.net/zhangphil/article/details/49385005
文章3:《Android Service之串行化Service:IntentService(系列3)》鏈接地址:http://blog.csdn.net/zhangphil/article/details/49387139
文章4:《Android Service進(jìn)程間雙向通信之Messenger(系列4)》http://blog.csdn.net/zhangphil/article/details/49402869
文章5:《Android進(jìn)程間通信(IPC)的AIDL機(jī)制:Hello World示例 》鏈接地址:http://blog.csdn.net/zhangphil/article/details/43876657
總結(jié)
以上是生活随笔為你收集整理的Android消息通信之无所不能的第三方开源项目EventBus的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取url中的参数值
- 下一篇: 部署LyncServer2013之一 前