EventBus3.0的使用

相信Android的同志們都知道這個玩意,github16k的存在神器,但是這幾天遇到一個問題,在一個activity中如果發(fā)送事件到另外一個activity中,因為另外一個activity還沒有初始化,導(dǎo)致了消息沒有接受到的問題,在查看eventbus的文檔后,發(fā)現(xiàn)3.0有增加了一個方法。先看看最基本的使用方法吧,先上EventBus的github地址https://github.com/greenrobot/EventBus

1、引入姿勢

compile 'org.greenrobot:eventbus:3.0.0'

二、使用姿勢

1)自定義一個類,可以是空的

public class MyEvent {

    private String data;

    public MyEvent(String data){
        this.data = data;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}
(2)、在接受消息的頁面進行注冊
@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
    }
(3)、解除注冊,也是在接受消息頁面,和注冊對應(yīng)
 @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
(3)、在接受頁面定義接收方法
 @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMainEvent(MyEvent event){
        Log.e("123", "接受到的數(shù)據(jù)"+event.getData());
    }
(4)、在另外的頁面進行發(fā)送消息
@Override
    protected void onActivityCreate(Bundle savedInstanceState) {

        TextView tv = (TextView) rootView.findViewById(R.id.login_ll);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post("event");
            }
        });
    }

點擊按鈕發(fā)送消息。以上就是eventbus的簡單用法。

下面來說下我遇到的問題,在一個A的activity中發(fā)送消息,在B的Activity中接收,但是A的activity發(fā)送消息,但是不一定進入到B中,但是有時候需要去B中看數(shù)據(jù),用上面的辦法發(fā)送消息突然發(fā)現(xiàn)沒有辦法搞定。然后查看發(fā)現(xiàn)用eventbus的粘性事件可以搞定。

1、注冊和注銷事件是一樣的
2、發(fā)送事件
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
3、接收事件
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {   
    textField.setText(event.message);
}

用完以后發(fā)現(xiàn)有個問題,就是一旦發(fā)送事件以后,在進入到接收消息事件的頁面就會觸發(fā),有時候事件是短暫性的,沒必要一直存在,查閱文檔后發(fā)現(xiàn),粘性事件可以清除。

清空事件
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // "Consume" the sticky event
    EventBus.getDefault().removeStickyEvent(stickyEvent);
    // Now do something with it
}
其他需求也可以這么玩
MessageEvent stickyEvent = EventBus.getDefault().removeStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // Now do something with it
}

好了,搞定了,希望這些能給有用的人幫助。
最后附贈幫助的地址:http://greenrobot.org/eventbus/documentation/configuration/sticky-events/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用: 網(wǎng)址:https://github.com/greenrobot/EventBus 依賴:compile'...
    0青衣小褂0閱讀 391評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,229評論 25 708
  • EventBus最新版,用法有變,網(wǎng)上很多都過時了,現(xiàn)在自己來總結(jié)。 首先訂閱者必須注冊和反注冊,發(fā)布者不需要注冊...
    碼圣閱讀 225評論 0 1
  • 項目到了一定階段會出現(xiàn)一種甜蜜的負擔(dān):業(yè)務(wù)的不斷發(fā)展與人員的流動性越來越大,代碼維護與測試回歸流程越來越繁瑣。這個...
    fdacc6a1e764閱讀 3,337評論 0 6
  • 第一次長時間的約會,但根本不覺得滿足。 都怪我自己,本應(yīng)該是一整天的約會。變的只有4個小時。真是想揍死自己…… 很...
    Z_J_Z閱讀 297評論 0 0

友情鏈接更多精彩內(nèi)容