1. 程式人生 > >專案解耦必備-EventBus的詳細講解(一)

專案解耦必備-EventBus的詳細講解(一)

相關文章:


很早之前,就想寫一篇關於EventBus使用的文章,一直沒有時間,最近專案不太忙,抽出一些時間把之前的專案中的技術沉澱一下,抽取出一些東西寫成文章與大家分享一下。

在做專案的時候,難免會碰到一個問題,就是在不同執行緒或者不同的元件中進行通訊,Android提供了一個Intent可以實現這種功能,但是對於專案來說耦合性太高,所以出現了一個叫做EventBus的機制來處理這些問題。廢話不多說,直接切入主題。

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

使用EventBus其實很簡單,我們分為四步來詳細講解:

第一步:下載EventBus的jar包,可以去Git官網下載。

下載完成後,手動編譯一下Gradle:compile files('libs/EventBus.jar')

注意:有很多朋友搭建之後會出現錯誤,這是因為我這個是基於3.0以下的版本,你一定要下載3.0以下的才可以正常執行,至於2.0和3.0以上的什麼區別,後面我會繼續推出講解,主要就是3.0以上是全註解方式。

第二步:建立一個bean類,用於接收和傳遞資料,接受的型別為String字串。

public class EventBusBean {
    private String message;
    public EventBusBean(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

第三步:編寫MainActivity,在MainActivity中我們建立一個Button和一個TextView,點選Button後會跳轉到SecondActivity

在載入完佈局之後要對EventBus進行註冊,並在Activity銷燬的時候進行反註冊。

public class MainActivity extends AppCompatActivity {
    @Bind(R.id.textView)
    TextView textView;
    @Bind(R.id.button)
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ButterKnife.bind(this);
        //註冊EventBus
        EventBus.getDefault().register(this);
    }
    @OnClick({R.id.textView, R.id.button})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button:
                //跳轉介面
                startActivity(new Intent(MainActivity.this, SecondActivity.class));
                break;
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //反註冊EventBus
        EventBus.getDefault().unregister(this);
    }

第四步:編寫SecondActivity,在SecondActivity中值建立一個Button用於傳送資料。

 public class SecondActivity extends AppCompatActivity {
    @Bind(R.id.button)
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        ButterKnife.bind(this);
    }
    @OnClick(R.id.button)
    public void onClick() {
       //將需要把傳遞給MianActivity的資料post到我們建立的EventBusBean中,傳送資訊完成
        EventBus.getDefault().post(new EventBusBean("MainActivity的內容已經改變了!"));
    }
}

第五步:MainActivity執行回撥,在MainActivity中我們實現一個方法onEventMainThread,我們先不管他是怎麼回事,我在後面會詳細講解,在這個方法中我們將我們之前SecondActivity儲存的資料拿出來進行UI的更新。

    @OnClick({R.id.textView, R.id.button})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button:
                //跳轉介面
                startActivity(new Intent(MainActivity.this, SecondActivity.class));
                break;
        }
    }
    //EventBus傳送訊息之後回撥的方法,引數是之前建立的Bean物件
    public void onEventMainThread(EventBusBean bean){
       //取出資料並進行UI的更新
        textView.setText(bean.getMessage());
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //反註冊EventBus
        EventBus.getDefault().unregister(this);
    }

效果如下圖:


我們來用一張圖總結一下整體的思路:思路很簡單易懂,一個執行緒傳送請求,bean物件接收到資訊後直接傳送到註冊過的執行緒中進行UI更新,相信大家都能看明白吧。


相關推薦

專案必備-EventBus詳細講解

相關文章: 很早之前,就想寫一篇關於EventBus使用的文章,一直沒有時間,最近專案不太忙,抽出一些時間把之前的專案中的技術沉澱一下,抽取出一些東西寫成文章與大家分享一下。 在做專案的時候,難

android BLE藍芽詳細講解

本文主要講解Android低功耗藍芽的api使用以及藍芽掃描、連線、傳送資料、接收資料等一系列操作,本篇結尾有本人封裝的BleLib藍芽庫,非常適合藍芽初學者使用,只需要一行程式碼注入就OK了,而且用法也極其簡單,我會在第二篇中專門講解一下BleLib庫的使用。

白話Hadoop入門-WordCount詳細講解2

     前一篇部落格講述瞭如何進行Hadoop壞境的搭建,以及第一個傳輸檔案程式的編寫,通過第一個檔案可能大概對Hadoop有一個瞭解了,但是Hadoop的精髓在於mapreduce,下面我們就來看看如何編寫Hadoop的第一個“hello world”程式--也就是Wor

springboot使用jpa的詳細講解3

這一章說一下jpa使用註解使用sql的方法 如果不按照jpa要求,jpa給我們提供了@Query註解來自定義sql或者hql 1、使用hibernate的hql方式 /** * 在使用hql的時候

Android六種佈局詳細講解轉載

轉載地址:http://blog.csdn.net/u013254061/article/details/52512146 這篇就對LinearLayout、RelativeLayout、自定義ViewGroup、FrameLayout、TableLayout、Abs

springboot使用jpa的詳細講解2

本次主要說一下jpa提供的查詢方式: 1、JPA原生的簡單語法 jpa根據fang方法名自動生成sql7語句。主要語法為: 查詢:以findBy開頭,後面跟上屬性名。例:findByName 或者findByNameAndId 刪除:以deleteBy開頭,後面跟上屬

【cocos2dx 3.2】Flappy Bird開發超詳細講解主角小鳥的建立

本文可以隨意轉載,轉載請註明出處,謝謝! 像之前我們說的,GameLayer是管家,其他的東西(小鳥,管道,草地等)各自封裝成類。現在我們就把主角小鳥封裝成一個類。 在這裡我們先思考下,我們有三種不同顏色的小鳥,在預載入LoadingScene裡我們給它們初始化了各自的動

C# ABP源碼詳 之 BackgroundJob,後臺工作

技術分享 轉發 cbac wid 性能 更新 strong ron bst 本文歸屬作者所有,轉發請註明本文鏈接。 1. 前言 ABP的BackgroundJob,用來處理耗時的操作。比如客戶端上傳文件,我們要把文件(Excel)做處理,這耗時的操作我們應該放到後臺工作

c#串口通信講解winform、wpf

定義 cep 回調 true comm ive get exc pre 串口操作需要註意的幾點如下: 1、如果是USB轉串口;則需要安裝USB轉串口驅動,附件有此驅動。 2、串口打開狀態最好不要直接插拔串口,可能會導致中控板或者串口線燒壞。 3、使用串口調試工具CEIWEI

ThinkJS框架入門詳細教程開發環境

install devel 版本 開發 conf doc 瀏覽器 打開 變量 一、前端標配環境 1、nodeJS正確安裝,可以參考:http://www.cnblogs.com/chengxs/p/6221393.html 2、git正確安裝,可以參考:http://w

區塊鏈的共識算法 及 分叉 的通俗講解

一段 過大 關系 動物 .net 公式 廣播 安全 user 作者:林冠宏 / 指尖下的幽靈 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh

Solr叢集搭建詳細教程 Linux伺服器上安裝JDK小白教程

注:歡迎大家轉載,非商業用途請在醒目位置註明本文連結和作者名dijia478,商業用途請聯絡本人[email protected]。 一、Solr叢集的系統架構 SolrCloud(solr 雲)是Solr提供的分散式搜尋方案,當你需要大規模,容錯,分散式索引和檢索能力時使用 SolrCloud

Solr集群搭建詳細教程

nbsp zookeeper 節點 功能 安裝jdk 集群 創建 主服務器 mage 註:歡迎大家轉載,非商業用途請在醒目位置註明本文鏈接和作者名dijia478,商業用途請聯系本人[email protected]。 一、Solr集群的系統架構 SolrCloud(solr

安卓專案實戰之CoordinatorLayout實現頁面特效

效果圖如下: material design控制元件簡介: 轉載自:https://blog.csdn.net/gitzzp/article/details/52573068 CoordinatorLayout CoordinatorLayout:協調者佈局。它是support

安卓專案實戰之Glide 3高手養成:Glide的基本使用

前言 現在Android上的圖片載入框架非常成熟,從最早的老牌圖片載入框架UniversalImageLoader,到後來Google推出的Volley,再到後來的新興軍Glide和Picasso,當然還有Facebook的Fresco。每一個都非常穩定,功能也都十分強大。但是它們的使用

Springboot 自動生成實體程式碼 屬性帶註釋未優化 詳細步驟

框架:springboot+codemodel 自動生成實體程式碼 ①引入codemodel的jar <!-- https://mvnrepository.com/artifact/com.sun.codemodel/codemodel-project --> <dep

EventBus原始碼解析—訂閱過程

1.EventBus原始碼解析(一)—訂閱過程 2.EventBus原始碼解析(二)—釋出事件和登出流程 前言 最近發現EventBus用起來是真的方便,本來對於EventBus我對於這個框架的原始碼的閱讀的優先順序是比較低的,因為這個框架不像OkHttp,Gli

1.大資料指CDH叢集搭建詳細步驟

1.使用CDH,其中CDH表示的意思是Cloudera’s Distribution Including Apache Hadoop,簡稱“CDH”) 基於web的使用者介面,支援大多數的hadoop元件,包括了HDFS,MapReduce以及HIve和Pig Hbase以及Zookeepe

Idea建立maven web專案,並使用tomcat外掛執行

前言: 從eclipse轉idea是中遇到了很多問題,折騰了很久最終才勉強完成基本專案結構的搭建,部落格一篇以為總結!   一:建立專案 (1)點選建立專案   (2)選擇maven   (3)填寫專案

scrapy簡單入門及例項講解

初識Scrapy Scrapy是一個用於Web網站抓取的應用框架,輸出的結構化資料可以廣泛用於各類程式,比如:資料探勘、資料處理、資料存檔等 儘管Scrapy是為Web抓取設計的,但也可以用於從API中提取資料 通過一個例項認識spider 為了快速認識S