EventBus3 0 使用(非原創)

2021-09-12 07:02:20 字數 2816 閱讀 1072

寫完上篇文章,這篇這心不想寫了,但是每週至少一篇的習慣不能改啊!雖然eventbus使用起來很簡單,但是種類特別多,比如他有粘性事件和非粘性事件,他們又都含有四種模式,並且還要測試在ui執行緒和非ui執行緒,所以情況很多種,廢話不多說繼續看。

1、eventbus工具類,這裡為了使用方便寫了乙個簡單的工具類,下面的文章就直接使用這個工具類了。

/**

* 部落格:

*/public class eventbusutils

/*** 註冊eventbus

** @param subscriber 訂閱者物件

*/public static void register(object subscriber) else

}/**

* 取消註冊eventbus

** @param subscriber 訂閱者物件

*/public static void unregister(object subscriber)

/*** 發布訂閱事件

** @param event 事件物件

*/public static void post(object event)

/*** 發布粘性訂閱事件

** @param event 事件物件

*/public static void poststicky(object event)

/*** 移除指定的粘性訂閱事件

** @param eventtype class的位元組碼,例如:string.class

*/public static void removestickyevent(classeventtype)

}/**

* 移除所有的粘性訂閱事件

*/public static void removeallstickyevents()

/*** 取消事件傳送

** @param event 事件物件

*/public static void canceleventdelivery(object event)

}2、建立訂閱事件

public class messageevent

}

3、建立訂閱者模式和型別

3.1、訂閱者模式分為四類:

threadmode.main          不管從哪個執行緒發出的事件,main模式都會在ui(主線程)執行緒執行

threadmode.posting       事件從哪個執行緒發布出來的就會在該執行緒中執行

threadmode.background    如果傳送事件的執行緒是ui執行緒,則重新建立新的子執行緒執行,因此不能執行更新ui的操作

threadmode.async         不管從哪個執行緒發出的事件,async模式都會建立乙個新的子執行緒來執行

3.2、訂閱者的型別分為粘性事件和非粘性事件

預設就是非粘性事件,如果是粘性事件,只需要在事件的註解上面加上

sticky = true

3.3、粘性事件,在註解上加上 priority = 優先級數(int值)

priority = 1

3.4、下面就這幾種模式分別講解

3.4.1、首先是eventbus的註冊,在activity的onstart()中註冊   

@override

protected void onstart()

eventbus取消註冊,在activity的ondestroy()中取消註冊

@override

protected void ondestroy()

3.4.2、傳送事件

eventbusutils.post(new messageevent("secondactivity發布messageevent訊息了"));

3.4.3、註冊事件(含有優先順序)

mian模式

@subscribe(threadmode = threadmode.main, priority = 1)

public void onmessageeventmain(myevent.message event)

posting模式

@subscribe(threadmode = threadmode.posting, priority = 2)

public void onmessageeventpost(myevent.message event) else

}background模式

@subscribe(threadmode = threadmode.background, priority = 3)

public void onmessageeventbackground(myevent.message event) else

}async模式

@subscribe(threadmode = threadmode.async, priority = 4)

public void onmessageeventasync(myevent.message event)

如果為粘性事件則:

傳送粘性事件

eventbusutils.poststicky(new messageevent("secondactivity發布messageevent訊息了"));

訂閱粘性訊息

@subscribe(threadmode = threadmode.main, sticky = true)

public void messageevent(messageevent event) {

tv_text1.settext(event.message);

EventBus3 0簡單使用

1.build.gradle新增引用 compile org.greenrobot eventbus 3.0.0 2.定義乙個事件型別 public classfirstevent publicstring getmsg 3.訂閱 解除訂閱 訂閱在oncreate中訂閱 eventbus.getde...

EventBus3 0原始碼解析

eventbus的註冊 eventbus.getdefault register this 那麼我們來看一下eventbus.getdefault 到底做了一下什麼操作 public static eventbus getdefault return defaultinstance 就是拿到了eve...

關於EventBus3 0(筆記)

今天在用eventbus的時候,突然發現訊息發不出去了!eventbus的使用本身不難,突然碰到這種情況有點懵逼。google了一下,也沒找到答案。subscribe threadmode threadmode.main fun onhit 1 replacefragment replacefrag...