android第三方框架(三)EventBus

EventBus:是用來(lái)簡(jiǎn)化android組建之間的通信,otto也能完成,但效率院低于eventbus。Eventbus

基于觀察者模式,一個(gè)事件的訂閱者,一個(gè)事件的發(fā)布者

使用方式:添加依賴 compile 'org.greenrobot:eventbus:3.0.0'

在onCreate中注冊(cè)總線事件:EventBus.getDefault().register(this);

在onDestroy中注銷事件:EventBus.getDefault().unregister(this);

使用注解@Subsribe訂閱方法:

@Subscribe(threadMode = ThreadMode.MAIN,priority =1)

public void onMessageEvent(MyEvent event) {

Logger.d("message is " + event.getMsg());

? ? // 更新界面

? ? EventBus2.setText(event.getMsg());

}

發(fā)布事件:EventBus.getDefault().post(messageEvent);

EventBus3.0有四種線程模型,分別是:

POSTING (默認(rèn))? 表示事件處理函數(shù)的線程跟發(fā)布事件的線程在同一個(gè)線程。

MAIN 表示事件處理函數(shù)的線程在主線程(UI)線程,因此在這里不能進(jìn)行耗時(shí)操作。

BACKGROUND 表示事件處理函數(shù)的線程在后臺(tái)線程,因此不能進(jìn)行UI操作。如果發(fā)布事件的線程是主線程(UI線程),那么事件處理函數(shù)將會(huì)開(kāi)啟一個(gè)后臺(tái)線程,如果果發(fā)布事件的線程是在后臺(tái)線程,那么事件處理函數(shù)就使用該線程。

ASYNC 表示無(wú)論事件發(fā)布的線程是哪一個(gè),事件處理函數(shù)始終會(huì)新建一個(gè)子線程運(yùn)行,同樣不能進(jìn)行UI操作。

事件優(yōu)先級(jí):一個(gè)事件有幾個(gè)方法訂閱的時(shí)候,并且在一個(gè)線程模型下,可以配置優(yōu)先級(jí)來(lái)決定調(diào)用的先后順序,priority默認(rèn)為0,數(shù)值越大優(yōu)先級(jí)越高。

粘性事件:事件提前發(fā)送出來(lái),當(dāng)某類注冊(cè)后并且有事件的訂閱方法后,馬上調(diào)用。eventbus內(nèi)部做了緩存。

發(fā)布:EventBus.getDefault().postSticky("RECOGNIZE_SONG");

接收:@Subscribe(threadMode = ThreadMode.MAIN, sticky =true)

? ? public void receiveSoundRecongnizedmsg(String insType) {

? ? ? ? if("RECOGNIZE_SONG".equals(insType)) {

? ? ? ? ? ? soundRecognizeCtrl();

? ? ? ? }

? ? }

移除:EventBus.getDefault().removeStickyEvent(stickyEvent);


3.0后通過(guò)注解反射的方式標(biāo)識(shí)訂閱方法

增加了:annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'

app的gradle中增加:

javaCompileOptions {

annotationProcessorOptions {

arguments = [eventBusIndex:'com.example.dell.wx.MyEventBusIndex',

verbose? ? ? :'true']

} }

在application中增加:EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();初始化EventsBus的單例。

3.0后EventBus將onEvent開(kāi)頭的方法都視為訂閱方法,通過(guò)后拼接的字符串來(lái)區(qū)分線程模型。

1、onEvent:

2、onEventMainThread:

3、onEventBackground:

4、onEventAsync:

與之前的四種模型一一對(duì)應(yīng)。

未完待續(xù)。。。。。。

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

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

  • 前言:EventBus出來(lái)已經(jīng)有一段時(shí)間了,github上面也有很多開(kāi)源項(xiàng)目中使用了EventBus。所以抽空學(xué)習(xí)...
    Kerry202閱讀 1,370評(píng)論 1 2
  • 一、簡(jiǎn)介 EventBus是由greenrobot 組織貢獻(xiàn)的一個(gè)Android事件發(fā)布/訂閱輕量級(jí)框架。Even...
    Mr丶sorrow閱讀 15,389評(píng)論 0 13
  • EventBus 是一個(gè)Android端優(yōu)化的 publish/subscribe 消息總線,簡(jiǎn)化了應(yīng)用程序各個(gè)組...
    王世軍Steven閱讀 1,938評(píng)論 4 21
  • 先吐槽一下博客園的MarkDown編輯器,推出的時(shí)候還很高興博客園支持MarkDown了,試用了下發(fā)現(xiàn)支持不完善就...
    Ten_Minutes閱讀 651評(píng)論 0 2
  • 項(xiàng)目地址:EventBus,本文分析版本: 3.1.1 一、概述 EventBus 是一個(gè) Android 事件發(fā)...
    Yi__Lin閱讀 1,147評(píng)論 1 10

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