EventBus的簡單介紹


EventBus是什么?

EventBus,顧名思義,是“事件總線”的意思。更具體的說是一個針對Java和Android的事件發布/訂閱框架(EventBus is a publish/subscribe event bus for Android and Java.)

GitHub地址:https://github.com/greenrobot/EventBus

圖示:

 

EventBus的使用

1.定義事件

public class MessageEvent {

    private String name;

    public MessageEvent(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MessageEvent{" +
                "name='" + name + '\'' +
                '}';
    }
}

2.訂閱

普通訂閱:

需要先進行注冊,然后在有相對應的信息發出時,可以獲取到信息。

//注冊和移除需要確定在哪個生命周期進行
//注冊
EventBus.getDefault().register(this);
//移除
EventBus.getDefault().unregister(this);

//事件處理:
//threadMode有四種類型(MAIN、POSTING、BACKGROUND、AYSNC)
@Subscribe(threadMode = ThreadMode.MAIN)
    public void MessageEventBus(MessageEvent event) {
        tvEventbusResult.setText(event.toString());
    }

 粘性訂閱

不需要先注冊,當已經有粘性信息發出,注冊時即收到信息。

//注冊和移除需要確定在哪個生命周期進行
//注冊
EventBus.getDefault().register(this);
//移除
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(this);

//事件處理:
//threadMode有四種類型(MAIN、POSTING、BACKGROUND、AYSNC)
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void MessageEventBus(MessageEvent event) {
        tvEventbusResult.setText(event.toString());
    }

3.發送事件

//發送普通事件
EventBus.getDefault().post(new MessageEvent("普通事件"));
//發送粘性事件
EventBus.getDefault().postSticky(new MessageEvent("粘性事件"));

 

EventBus原理

EventBus運用注解和反射技術,發布/訂閱模式、單例模式,通過一系列的操作,實現消息的發送和接收(具體見EventBus源碼)

 

思考:

結合github上EventBus的介紹,和一些具體介紹EventBus使用的博客,並進行一定的編碼測試,可以做到對EventBus的初步了解和使用。

深入了解的話,還是要結合源碼,一點點分析其設計思想和使用到的語言相關技術和設計模式等。

知其然易,知其所以然難。

 

--End


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM