1. 程式人生 > >【FastDev4Android框架開發】訊息匯流排EventBus的基本使用(二十)

【FastDev4Android框架開發】訊息匯流排EventBus的基本使用(二十)

轉載請標明出處: 

().前言:   

     【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org 

     今天我們的專案繼續更新,今天我們主要講解訊息匯流排EventBus的基本使用方法,後面一篇我們會從原始碼的角度稍微分析一下實現過程。

().簡介:   

以前我們做元件間的訊息分發更新,一般會採用觀察者模式,或者介面資料回撥的相關方式。但是這樣的做法雖然可以解決我們的問題,但是元件之間的耦合比較嚴重,而且程式碼也不易閱讀和相關維護。為了解決這樣的問題我們可以使用訊息匯流排EventBus框架。

EventBus是一款針對Android優化的釋出/訂閱事件匯流排。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,執行緒之間傳遞訊息.優點是開銷小,程式碼更優雅。以及將傳送者和接收者解耦。EventBus開源站點地址

:https://github.com/greenrobot/EventBus

整個訂閱和接受的架構如下圖:


EventBus的特點如下:

  • 簡化元件間的訊息通訊
  • 使得程式碼更加簡潔
  • 速度很快
  • jar包非常小,不到50K
  • 還有一些有點例如執行緒之間的通訊,優先順序等

().使用方式

       3.1.AndroidStudio進行Gradle配置如下:

compile 'de.greenrobot:eventbus:2.4.0'

       3.2.事件物件定義

   publicclass MessageEvent { /* Additional fields if needed */ }

       3.3.在接收頁面進行註冊

 eventBus.register(this);

       3.4.接收訊息方法實現

  public voidonEvent(AnyEventType event) {/* Do something */};

       3.5.訊息傳送

  eventBus.post(event);

       OK上面是官方的使用說明,現在我們來具體使用一個例項來展示一下EventBus的基本使用。

().具體事例

        4.1.實現需求:在第一個Activity中有一個按鈕和一個TextView,然後點選按鈕開啟第二個Activity,在第二個Activity中有一個按鈕,點選按鈕關閉當前第二個Activity,同時訊息回撥到第一個Activity中,在Text

View中進行顯示。


   4.2.我們這邊需要兩個Activity佈局

<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"android:layout_width="match_parent"
   android:layout_height="match_parent">
 
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        android:text="點選開啟第二個Activity"
        android:id="@+id/button_one"/>
 
    <TextView
       android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:text="這邊顯示訊息內容..."
       android:id="@+id/textView_one" />
</LinearLayout>
<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"android:layout_width="match_parent"
   android:layout_height="match_parent">
 
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
        android:text="第二個Activity的按鈕"
        android:id="@+id/button_two"/>
 
    <TextView
       android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:text="當前為第二個Activity"
       android:id="@+id/textView_two" />
</LinearLayout>

 4.3.建立一個事件管理類:TestEventFirst.java

packagecom.chinaztt.fda.event;
/**
 * 當前類註釋:EventBus測試 First事件類
 * 專案名:FastDev4Android
 * 包名:com.chinaztt.fda.event
 * 作者:江清清 on 15/11/3 14:25
 * 郵箱:[email protected]
 * QQ: 781931404
 * 公司:江蘇中天科技軟體技術有限公司
 */
public classTestEventFirst {
     private String msg;
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public TestEventFirst(String msg){
         this.msg=msg;
     }
}
 

4.4:註冊和取消註冊

使用EventBus.getDefault().register(this);進行註冊

使用EventBus.getDefault().unregister(this);進行取消註冊

4.5.訊息傳送

使用 EventBus.getDefault().post(new TestEventFirst("我是第二個Activity回傳的資訊...."));進行訊息傳送

4.6.訊息接收

在註冊的Activity中進行重寫onEventMainThread()方法來進行處理接收訊息(除了這個方法以外,還有另外三個方法,具體我們會在下一篇文章中進行介紹)

/**
     * 收到訊息 進行相關處理
     * @param event
     */
    public voidonEventMainThread(TestEventFirst event) {
 
        textView_one.setText(event.getMsg());
        showToastMsgShort(event.getMsg());
    }

其中方法中的引數TestEventFirst就是傳送過來的訊息類,具體傳送的訊息全部已經封裝在裡面了。我們只需要使用event物件進行獲取處理即可。

4.7.完整第一個Activity和第二個Activity程式碼如下:

packagecom.chinaztt.fda.test;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.TextView;
importandroid.widget.Toast;
 
importcom.chinaztt.fda.event.TestEventFirst;
importcom.chinaztt.fda.ui.R;
importcom.chinaztt.fda.ui.base.BaseActivity;
importcom.chinaztt.fda.utils.Log;
 
importorg.androidannotations.annotations.Click;
importorg.androidannotations.annotations.EActivity;
importorg.androidannotations.annotations.ViewById;
importorg.w3c.dom.Text;
 
importde.greenrobot.event.EventBus;
 
/**
 * 當前類註釋:EventBus元件間資料通訊例項
 * 專案名:FastDev4Android
 * 包名:com.chinaztt.fda.test
 * 作者:江清清 on 15/11/3 13:14
 * 郵箱:[email protected]
 * QQ: 781931404
 * 公司:江蘇中天科技軟體技術有限公司
 */
@EActivity
public classEventBusTestActivity  extendsBaseActivity{
    Button button_one;
    TextView textView_one;
 
    @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.event_bus_test_layout);
        EventBus.getDefault().register(this);
       button_one=(Button)this.findViewById(R.id.button_one);
       textView_one=(TextView)this.findViewById(R.id.textView_one);
        button_one.setOnClickListener(newView.OnClickListener() {
            @Override
            public void onClick(View v) {
               openActivity(EventBusTestTwoActivity_.class);
            }
        });
    }
    /**
     * 收到訊息 進行相關處理
     * @param event
     */
    public voidonEventMainThread(TestEventFirst event) {
 
        textView_one.setText(event.getMsg());
        showToastMsgShort(event.getMsg());
    }
        @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}

packagecom.chinaztt.fda.test;
 
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
 
importcom.chinaztt.fda.event.TestEventFirst;
importcom.chinaztt.fda.ui.R;
importcom.chinaztt.fda.ui.base.BaseActivity;
 
importorg.androidannotations.annotations.Click;
importorg.androidannotations.annotations.EActivity;
importorg.androidannotations.annotations.ViewById;
 
importde.greenrobot.event.EventBus;
 
/**
 * 當前類註釋:
 * 專案名:FastDev4Android
 * 包名:com.chinaztt.fda.test
 * 作者:江清清 on 15/11/3 14:25
 * 郵箱:[email protected]
 * QQ: 781931404
 * 公司:江蘇中天科技軟體技術有限公司
 */
@EActivity
public classEventBusTestTwoActivity extends BaseActivity {
    Button button_two;
    @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.event_bus_test_two_layout);
       button_two=(Button)this.findViewById(R.id.button_two);
        button_two.setOnClickListener(newView.OnClickListener() {
            @Override
            public void onClick(View v) {
               EventBus.getDefault().post(new TestEventFirst("我是第二個Activity回傳的資訊...."));
               EventBusTestTwoActivity.this.finish();
            }
        });
    }
}

          到此我們的EventBus的基本使用已經講完了,看一下上面的效果演示,具體深入詳解以及其他的幾個方法的介紹和相關原始碼分析會在下一篇文章中進行講解。

我們的專案已經配置集成了訊息匯流排EventBus的例子.歡迎大家去Github站點進行clone或者下載瀏覽:https://github.com/jiangqqlmj/FastDev4Android同時歡迎大家starfork整個開源快速開發框架專案~

關注我的訂閱號(codedev123),每天分享移動開發技術(Android/IOS),專案管理以及部落格文章!第一時間獲取推送文章!


關注我的微博,可以獲得更多精彩內容

相關推薦

FastDev4Android框架開發訊息匯流排EventBus基本使用()

轉載請標明出處: (一).前言:        【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org      今天我們的

FastDev4Android框架開發HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造網易新聞Tab及滑動頁面效果(三六)

轉載請標明出處:(一).前言:            【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org         仿36Kr客戶端開發過程中,因為他們網站上面的新聞文章分類比較多,所以我

FastDev4Android框架開發CardView完全解析與RecyclerView結合使用(三)

轉載請標明出處:(一).前言:           【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org作為Android L開始,Google更新的除了RecyclerView之外的另一控制元件

FastDev4Android框架開發重寫WebView網頁載入以及JavaScript注入詳解(十三)

轉載請標明出處: (一).前言:            【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org       今天我們來學習一下重寫WebView元件來實現網頁的載入,以及我們平時AP

FastDev4Android框架開發非常漂亮的進度指示器AVLoadingIndicatorView的使用講解(八)

轉載請標明出處: (一).前言:          【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org      今天我們的專案繼續更新,今天主要要加入一個非常漂亮的進度指示器AVLoading

FastDev4Android框架開發Volley完全解析之基礎使用(六)

轉載請標明出處:(一).前言:             【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org對於網路框架這

FastDev4Android框架開發AndroidAnnnotations注入框架使用之最佳實踐SharedPreferences(七)

轉載請標明出處:  (一).前言:    前面我們已經對於AndroidAnnotations使用Adapters和lists做了講解,今天我們開始具體學習一下使用DI框架SharedPrefe

FastDev4Android框架開發RecyclerView完全解析之打造新版類Gallery效果(九)

轉載請標明出處:(一).前言:              【好訊息】個人網站已經上線執行,後面部落格以及技術乾貨等精彩文章會同步更新,請大家關注收藏:http://www.lcode.org         話說RecyclerView已經面市很久,也在很多應用中得到廣泛的使

Unity遊戲開發AssetBundle雜記--AssetBundle的三事

比較 streaming 指定 但是 chunk 加載 公司 prefab 方法 一、簡介   馬三在公司大部分時間做的都是遊戲業務邏輯和編輯器工具等相關工作,因此對Unity AssetBundle這塊的知識點並不是很熟悉,自己也是有打算想了解並熟悉一下AssetBun

微信開發SpringMVC將url生成維碼圖片直接展示在頁面上

利用google的開源包zxing生成二維碼 第一步:maven專案的zxing依賴 1 <!-- google zxing 生成二維碼 --> 2 <dependency> 3 <groupId>com.goog

VC MFC開發Dll 中對話方塊的控制元件無法接受到按鍵訊息的解決辦法

使用DLL注入到 別的程式中時,發現DLL的視窗過程無法響應WM_CHAR事件,摸索了很久,才找到原因,給碰到同樣問題的人蔘考。 WNDPROC OldComboEditProc = NULL; LRESULT CALLBACK ComboEditProc(   HW

Android應用開發Instrumentation簡單的模擬按鍵傳送訊息

   前段時間做了一個PSTN通話的應用程式,PAD連線座機實現通話功能。座機上有上翻、下翻通訊錄的功能。通訊錄用的是Google預設的。在不改動通訊錄的情況下只有使用模擬按鍵來發送訊息。程式碼很簡單,共享下!! publicclass MenuDemoActivity extends Activity

Android開發訊息提示框與對話方塊-使用Toast顯示訊息提示框

在前面的例項中,已經應用過Toast類來顯示一個簡單的提示框了。這次將對Toast進行詳細介紹。Toast類用於在螢幕中顯示一個訊息提示框,該訊息提示框沒有任何控制按鈕,並且不會獲得焦點,經過一段時間後自動消失。通常用於顯示一些快速提示資訊,應用範圍非常廣泛。 使用Toas

大數據開發你知道大數據語言的工具與框架嗎?

新節點 java 學習曲線 定義 onf 團隊 工具 cal 儀表盤 為了解大數據的當前和未來狀態,我們采訪了來自28個組織的31位IT技術主管。我們問他們,“你在數據提取,分析和報告中使用的最流行的語言,工具和框架是什麽?” 以下的文章是他們告訴我們的記錄,經過總結如下。

iOS越獄開發怎樣將應用打包成.ipa文件

ria font 配置文件 例如 方法 col stat pack 應該 在項目開發中。我們經常須要將project文件打包成.ipa文件。提供給越獄的iphone安裝。 以下是一種方法: 1、首先應該給project安裝好配置文件(這裏不再敖述),在ios de

微信開發02.搭建一個屬於自己的微信公眾平臺

tro 投票 新浪 關系 blank 訂閱 logs name 開發者 閱讀目錄 【網站開發】在新浪SAE上搭建一個博客 概述   公司年會上同事開發了一個微信企業號,包含了投票,抽獎,祝福墻功能,還開了一個Session,跟我們講了下公司的企業號開發過程和抽獎中獎

Android 應用開發 ActionBar 樣式具體解釋 -- 樣式 主題 簡單介紹 Actionbar 的 icon logo 標題 菜單樣式改動

detail sub str 進度條 代碼分析 extc dst 模式 html 作者 : 萬境絕塵 ([email protected]/* */)轉載請著名出處 : http://blog.csdn.net/shulianghan/article/deta

React Native開發React Native控件之ProgressBarAndroid進度條解說(12)

ice 發現 來講 top 文章 func dev all ios 轉載請標明出處:http://blog.csdn.net/developer_jiangqq/article/details/50596367本文出自:【江清清的博客】(一)前言 【好消息】

微信開發-- 發送模板消息

use keyword 選擇 調用 一次 png exc style col 我們需要將一些行為的進展消息推送給用戶。除了短信,發送微信模板消息也是不錯的選擇。模板消息免費、精準到達、而且可以引導用戶回到網站上來。但它有兩個前提條件。1個是必須開通了微信支付功能,你才能選擇

Unity遊戲開發淺談Unity遊戲開發中的單元測試

可靠 屬於 sin 自定義類型 允許 ogr 兩個 階段 ast 一、單元測試的定義與作用   單元測試定義:單元測試在傳統軟件開發中是非常重要的工具,它是指對軟件中的最小可測試單元進行檢查和驗證,一般情況下就是對代碼中的一個函數去進行驗證,檢查它的正確性。一個單元測試是