編輯:關於android開發
Android 第三方類庫之EventBus
工欲善其事必先利其器. Eventbus也是一款在開發中常用的利器
這篇也對EventBus的簡單介紹和使用,與之前個xutils介紹的級別一樣.http://www.cnblogs.com/greentomlee/p/6025470.html
作者:修雨軒陳 @博客園
開源項目地址:
https://github.com/greenrobot/EventBus
EventBus是一款針對Android優化的發布/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。
Eventbus 的發布訂閱(publish/subscribe)
Eventbus 有如下優點:
· simplifies the communication between components
· makes your code simpler (對於程序員而言,可以簡化代碼)
· is fast (執行速度很快)
· is tiny (~50k jar) (類庫的體積很小,大約只有50k)
· is proven in practice by apps with 100,000,000+ installs
· has advanced features like delivery threads, subscriber priorities, etc.
在github中將開源類庫下載到本地:
https://github.com/greenrobot/EventBus
作者提供的很詳細的說明文檔, 我是參考作者的文檔寫出的.在github主頁中也有簡單使用步驟.
http://greenrobot.org/eventbus/documentation/how-to-get-started/
-------------
軟件環境: Android Studio2.3 Beta3
在github中下載下來的eventbus
----------------
首先, 新建一個測試項目: TestEventBus
然後我們觀察一下下載的eventbus的目錄結構,並確定要導入的模塊是哪一個
通過對目錄中的結構分析,我們知道了:
在EventBus-master 下是有3個模塊可以供我們導入項目裡面的。 分別是:EventBus、EventBusAnnotationProcessor、EventBusPerformance。根據編程習慣我們知道:應該導入EventBus目錄。
確定了導入的類庫之後,
在該項目下新建導入的模塊
選擇‘evenbus’ 目錄進行導入。
導入成功之後的結構如下:
接下來就是對build.gradle進行編輯(注意build.gradle文件所在的目錄)
在文件中寫入這句話:
compile project(':EventBus')
這是因為我們模塊名稱就是 EventBus
(build.gradle寫入的依賴類庫的名字應該與導入EventBus之後的模塊名稱 保持一致)
首先描述一下我們要做什麼:
為了對比intent傳遞參數和Event bus 傳遞參數的區別,同時也為了練習使用EventBus , 我們准備了兩個Activity : MainActivity 和SendMsgActivity
首先利用使用傳統的消息傳遞的方式, 將消息從MainActivity發送到SendMsgActivity上;
然後利用Eventbus 再將新的消息從SendMsgActivity傳遞到MainAvtivity上。
PS 利用intent傳遞消息的這部分不在贅述
首先看MainActivity
由於需要接收來自SendMsgActivity的EvenBus消息, 所以需要新建一個實例注冊eventBus,注冊的動作應該寫在onStart()回調函數中.
@Override
protected void onStart() {// 注冊event bus
super.onStart();
EventBus.getDefault().register(this);
}
同時檔程序銷毀的時候,也需要注銷:
@Override
protected void onDestroy() {// 注銷eventBus
super.onDestroy();
EventBus.getDefault().unregister(this);
}
SendMsgAcitivty 會使用Eventbus 發送消息, 那麼他就是消息發送的地方.
細心的同學發現了, 我並沒有在intent裡面傳遞參數. 而是使用了
ventBus.getDefault().post()
方法類發送消息. 關鍵代碼如下:
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new MessageEvent("來, 給你發送一個消息..."));
Intent intent = new Intent(SendMsgActivity.this, MainActivity.class);
startActivity(intent);
}
});
其中 MessageEvent 是自定義個的 實體(結構體\bean)
public class MessageEvent {
public String msg="";
public MessageEvent(String msg)
{
this.msg = msg ;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
消息接受的地方(MainActivity)中接收消息的方法如下:
/**
* 處理接受消息的方法 “subscriber methods”
* 也可以使用注釋
* @link http://greenrobot.org/eventbus/documentation/how-to-get-started/
*
* @param evnt
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MessageEvent evnt)
{
String msg = evnt.getMsg();
//this.showMsgTv = (TextView) findViewById(R.id.tv_printer);
//this.showMsgTv.setText(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
出現的效果如圖下:
EventBus & Otto的使用和比較
http://www.jianshu.com/p/cb39a0018db1
RxJava和EventBus的區別?
https://www.zhihu.com/question/32179258
http://bbs.csdn.net/topics/392007033
Android插件化(使用Small框架) Android插件化(使用Small框架) 框架源碼 1. Create Project File->New->
Android-Universal-Image-Loader (圖片異步加載緩存庫)的源碼解讀 前言: 在Android開發中,對於圖片的加載可以說是個老生常談的問題了,
高效地分析Android內存--MAT工具解析 MAT(Memory Analyzer Tool), 是著名的Android內存分析工具, 雖然LeakCanary更
Android開發藝術探索學習筆記(十),android藝術探索第十章 Android的消息機制 面試中經常會被問到的一個問題:handler是如何