由淺入深瞭解EventBus:(一)

概述

  由greenrobot織貢獻(該組織還貢獻了greenDAO),一個Android事件發佈/訂閱輕量級框架;java

  EventBus是一個消息總線,以觀察者模式實現,用於簡化程序的組件、線程通訊,能夠輕易切換線程、開闢線程。EventBus分離了事件的發送者和接收者的耦合關係;它能夠替代咱們傳統的Intent,Handler,Broadcast在Fragment,Activity,Service,線程之間傳遞數據,執行方法。git

用法

  EventBus的git地址:https://github.com/greenrobot/EventBusgithub

  在Android項目中的build.gradle中添加依賴:框架

    compile 'org.greenrobot:eventbus:3.0.0'post

  1.使用EventBus首先要建立一個傳遞的事件類   gradle

  public class MessageEvent {
    public MessageEvent(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }

    private String message;
 }

   從代碼中能夠看出EventBus傳遞的事件類不須要繼承任何的接口和基類,就是一個普通的java類;ui

  2.用於EventBus內部採用的是觀察者模式,所以要使用EventBus框架,首先就是要先註冊/訂閱事件,在EventBus框架中註冊/訂閱事件也很是的簡單,只須要一行代碼;this

  EventBus.getDefault().register(this);

 註冊方法中的this就是咱們的訂閱類,也就是觀察者,能夠是一個Fragment,Activity,Service;spa

 3.在EventBus框架中能夠註冊/訂閱一個事件,也能夠取消註冊/訂閱事件,一樣也很簡單;線程

EventBus.getDefault().unregister(this);

 4.在觀察者模式中當被觀察者發生事件後,觀察者內部就有消息接收的方法,在EventBus也一樣,須要在訂閱類中實現咱們的消息接收的方法;  

  @Subscribe
    public  void  onMoonEvent(MessageEvent messageEvent){
        textView.setText(messageEvent.getMessage());
    } 

 在EventBus框架中對於觀察者的消息接收方法有必定的限制,首先方法必須是Public,並且方法的參數的類型必須是咱們定義的事件類;並且方法必須添加」@Subscribe「註解,由於在EventBus內部查找方法時,是根據註解來進行區分;

 在消息處理方法中咱們也能夠終止事件的傳遞,後續的事件再也不調用,只能在傳遞事件的時候調用;

  EventBus.getDefault().cancelEventDelivery(event) ;

 5.最後一步就是被觀察者觸發事件,在EventBus框架使用post(粘性事件觸發使用postSticky)方法;

   EventBus.getDefault().post(new MessageEvent("我是從SecondActivity 傳過來的信息"));

 整個EventBus框架的使用就是這麼簡單;關於事件類的分發中轉都是EventBus框架內部進行了實現,使用者能夠不用關心,只關心本身業務邏輯的實現;

相關文章
相關標籤/搜索