Android 第三方類庫簡單使用之EventBus

来源:http://www.cnblogs.com/greentomlee/archive/2017/02/03/6362454.html
-Advertisement-
Play Games

Android 第三方類庫之EventBus 1 PS 工欲善其事必先利其器. Eventbus也是一款在開發中常用的利器 這篇也對EventBus的簡單介紹和使用,與之前個xutils介紹的級別一樣.http://www.cnblogs.com/greentomlee/p/6025470.html... ...


Android 第三方類庫之EventBus

1 PS

工欲善其事必先利其器. Eventbus也是一款在開發中常用的利器

這篇也對EventBus的簡單介紹和使用,與之前個xutils介紹的級別一樣.http://www.cnblogs.com/greentomlee/p/6025470.html

作者:修雨軒陳 @博客園

2 簡介

開源項目地址:

https://github.com/greenrobot/EventBus

EventBus是一款針對Android優化的發佈/訂閱事件匯流排。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。

clip_image002

Eventbus 的發佈訂閱(publish/subscribe)

Eventbus 有如下優點:

· simplifies the communication between components

  • decouples event senders and receivers
  • performs well with Activities, Fragments, and background threads
  • avoids complex and error-prone dependencies and life cycle issues

· 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.

3 環境搭建三部曲

3.1 資源下載

在github中將開源類庫下載到本地:

https://github.com/greenrobot/EventBus

clip_image004

作者提供的很詳細的說明文檔, 我是參考作者的文檔寫出的.在github主頁中也有簡單使用步驟.

http://greenrobot.org/eventbus/documentation/how-to-get-started/

3.2 項目環境搭建

-------------

軟體環境: Android Studio2.3 Beta3

在github中下載下來的eventbus

----------------

首先, 新建一個測試項目: TestEventBus

clip_image005

然後我們觀察一下下載的eventbus的目錄結構,並確定要導入的模塊是哪一個

clip_image006

通過對目錄中的結構分析,我們知道了:

在EventBus-master 下是有3個模塊可以供我們導入項目裡面的。 分別是:EventBus、EventBusAnnotationProcessor、EventBusPerformance。根據編程習慣我們知道:應該導入EventBus目錄。

確定了導入的類庫之後,

在該項目下新建導入的模塊

clip_image007

選擇‘evenbus’ 目錄進行導入。

clip_image009

導入成功之後的結構如下:

clip_image010

接下來就是對build.gradle進行編輯(註意build.gradle文件所在的目錄)

clip_image011

在文件中寫入這句話:

compile project(':EventBus')

這是因為我們模塊名稱就是 EventBus clip_image012

(build.gradle寫入的依賴類庫的名字應該與導入EventBus之後的模塊名稱 保持一致)clip_image014

3.3 測試使用

首先描述一下我們要做什麼:

為了對比intent傳遞參數和Event bus 傳遞參數的區別,同時也為了練習使用EventBus , 我們準備了兩個Activity : MainActivity 和SendMsgActivity

首先利用使用傳統的消息傳遞的方式, 將消息從MainActivity發送到SendMsgActivity上;

然後利用Eventbus 再將新的消息從SendMsgActivity傳遞到MainAvtivity上。

PS 利用intent傳遞消息的這部分不在贅述

3.3.1 在接受消息的地方註冊和註銷消息

首先看MainActivity

clip_image015

由於需要接收來自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);
}
3.3.2 在發送消息的地方寫發送方法

SendMsgAcitivty 會使用Eventbus 發送消息, 那麼他就是消息發送的地方.

clip_image016

細心的同學發現了, 我並沒有在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;
     }
}
3.3.3 在消息接受的地方書寫接受消息的動作

消息接受的地方(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();
}

出現的效果如圖下:

clip_image018

4 擴展閱讀

EventBus & Otto的使用和比較

http://www.jianshu.com/p/cb39a0018db1

RxJava和EventBus的區別?

https://www.zhihu.com/question/32179258

http://bbs.csdn.net/topics/392007033


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • activity_home.xml home_list_item.xml style.xml color.xml HomeActivity.java 知識點: GirdView + BaseAdapter+點擊事件 自定義TextView ...
  • 作者:Antonio Leiva 時間:Feb 2, 2017 原文鏈接:https://antonioleiva.com/functional-operations-collections-kotlin/ 對於我來說,我必須承認用Java代碼處理列表是最令人沮喪的事之一。 在這方面,雖然Java ...
  • 根據功能模塊劃分(Android開發推薦此方法) - Activity mobilesafe.activty - 後臺服務 mobilesafe.service - 廣播接受者 mobilesafe.receiver - 資料庫 mobilesafe.db.dao - 對象(java bean) m ...
  • 在google play上發佈apk,當上傳了apk文件,填寫了相關的內容信息和介紹圖片、圖標後,出現“發佈應用”始終灰色無法點擊,查看原因顯示如下問題: 其中支持的設備數量始終顯示為0,懷疑是編譯出來的apk哪裡不規範! 經過對原有工程代碼的查找修改,去除了mips和x86兩個jniLibs下的鏈 ...
  • 學習視頻之後自己操作時的筆記。 0.視頻地址:http://www.imooc.com/video/3265 1.功能預覽: 說明:1)輸入錯誤用戶名和密碼,點擊登錄,彈出提示框“禁止登錄”; 2)輸入正確用戶名和密碼,點擊登錄,彈出提示框“登錄成功”; 3)輸入正確用戶名和密碼,並且勾選保存用戶名 ...
  • 沒有蘋果電腦打包iOS平臺的 Ionic 2程式——《Ionic 2 實例開發》更新內容春節剛過,祝各位新的一年裡萬事如意,一帆風順。《Ionic 2 實例開發》在這段時間里更新瞭如下內容:Ionic 2 中使用管道處理數據Ionic 2 中使用HTTP與遠程伺服器交互數據Ionic 2 中的樣式與 ...
  • 0.視頻地址:http://www.imooc.com/video/3265 1.使用SharePreferences存取數據: public class MainActivity extends Activity { @Override protected void onCreate(Bundle ...
  • 作者:Antonio Leiva 時間:Jan 25, 2017 原文鏈接:https://antonioleiva.com/data-classes-kotlin/ 在前面的文章中,我們已經見到了類,而數據類還可以進一步幫助我們簡化代碼。 數據類是什麼? 數據類是僅僅包含狀態而沒有任何可執行的操作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...