《Android移動(dòng)應(yīng)用開發(fā)》EventBus事件管理_第1頁(yè)
《Android移動(dòng)應(yīng)用開發(fā)》EventBus事件管理_第2頁(yè)
《Android移動(dòng)應(yīng)用開發(fā)》EventBus事件管理_第3頁(yè)
《Android移動(dòng)應(yīng)用開發(fā)》EventBus事件管理_第4頁(yè)
《Android移動(dòng)應(yīng)用開發(fā)》EventBus事件管理_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

EventBus2024/1/29132024/1/29認(rèn)識(shí)EventBus使用EventBus目錄CONTENT12參考教材:《Android應(yīng)用開發(fā)項(xiàng)目化教程》認(rèn)識(shí)EventBus來(lái)源EventBus是GreenRobot出品的Android系統(tǒng)的一個(gè)EventBus類庫(kù)。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service及線程之間傳遞消息。EventBus的優(yōu)點(diǎn)是開銷小,代碼更優(yōu)雅,并實(shí)現(xiàn)將發(fā)送者和接收者解耦。1認(rèn)識(shí)EventBus角色Publisher:是發(fā)布者,通過(guò)post()方法將消息事件Event發(fā)布到事件總線。EventBus:是事件總線,遍歷所有已經(jīng)注冊(cè)事件的訂閱者們,找到里邊的onEvent等4個(gè)方法,分發(fā)Event。Subscriber:是訂閱者,收到事件總線發(fā)下來(lái)的消息。即onEvent方法被執(zhí)行。注意參數(shù)類型必須和發(fā)布者發(fā)布的參數(shù)一致。1認(rèn)識(shí)EventBus訂閱者訂閱者首先調(diào)用EventBus的register接口訂閱某種類型的事件,當(dāng)發(fā)布者通過(guò)post接口發(fā)布該類型的事件時(shí),EventBus執(zhí)行調(diào)用者的事件響應(yīng)函數(shù)。1認(rèn)識(shí)EventBusEventBus類EventBus類負(fù)責(zé)所有對(duì)外暴露的API,其中的register()、post()、unregister()函數(shù)配合上自定義的EventType及事件響應(yīng)函數(shù)即可完成核心功能。EventBus默認(rèn)可通過(guò)靜態(tài)函數(shù)getDefault()獲取單例,當(dāng)然有需要也可以通過(guò)EventBusBuilder或構(gòu)造函數(shù)新建一個(gè)EventBus,每個(gè)新建的EventBus發(fā)布和訂閱事件都是相互隔離的,即一個(gè)EventBus對(duì)象中的發(fā)布者發(fā)布事件,另一個(gè)EventBus對(duì)象中的訂閱者不會(huì)收到該訂閱。1認(rèn)識(shí)EventBusEventBus類4種訂閱函數(shù)類onEvent:如果使用onEvent作為訂閱函數(shù),那么該事件在哪個(gè)線程發(fā)布出來(lái)的,onEvent就會(huì)在這個(gè)線程中運(yùn)行,也就是說(shuō)發(fā)布事件和接收事件線程在同一個(gè)線程。使用這個(gè)方法時(shí),在onEvent方法中不能執(zhí)行耗時(shí)操作,如果執(zhí)行耗時(shí)操作容易導(dǎo)致事件分發(fā)延遲。onEventMainThread:如果使用onEventMainThread作為訂閱函數(shù),那么不論事件是在哪個(gè)線程中發(fā)布出來(lái)的,onEventMainThread都會(huì)在UI線程中執(zhí)行,接收事件就會(huì)在UI線程中運(yùn)行,這個(gè)在Android中是非常有用的,因?yàn)樵贏ndroid中只能在UI線程中跟新UI,所以在onEvnetMainThread方法中是不能執(zhí)行耗時(shí)操作的。1認(rèn)識(shí)EventBusEventBus類4種訂閱函數(shù)類onEventBackground:如果使用onEventBackgrond作為訂閱函數(shù),那么如果事件是在UI線程中發(fā)布出來(lái)的,那么onEventBackground就會(huì)在子線程中運(yùn)行,如果事件本來(lái)就是子線程中發(fā)布出來(lái)的,那么onEventBackground函數(shù)直接在該子線程中執(zhí)行。onEventAsync:使用這個(gè)函數(shù)作為訂閱函數(shù),那么無(wú)論事件在哪個(gè)線程發(fā)布,都會(huì)創(chuàng)建新的子線程在執(zhí)行onEventAsync。1認(rèn)識(shí)EventBus事件事件(Event)又可稱為消息。其實(shí)就是一個(gè)對(duì)象,可以是網(wǎng)絡(luò)請(qǐng)求返回的字符串,也可以是某個(gè)開關(guān)狀態(tài)等等。事件類型(EventType)指事件所屬的Class。事件分為一般事件和Sticky事件,相對(duì)于一般事件,Sticky事件不同之處在于,當(dāng)事件發(fā)布后,再有訂閱者開始訂閱該類型事件,依然能收到該類型事件最近一個(gè)Sticky事件。1使用EventBus一般流程2使用EventBus一般流程定義事件:定義一個(gè)類,繼承默認(rèn)的Object即可,用于區(qū)分事件和傳輸數(shù)據(jù)。添加訂閱者:EventBus.getDefault().register(this);將所在類作為訂閱者,框架會(huì)通過(guò)反射機(jī)制獲取所有方法及其參數(shù)。訂閱者所在類可以定義以下一個(gè)或多個(gè)方法用以接收事件:publicvoidonEvent(MsgEvent1msg)publicvoidonEventMainThread(MsgEvent1msg)publicvoidonEventBackgroundThread(MsgEvent1msg)publicvoidonEventAsync(MsgEvent1msg)2使用EventBus一般流程發(fā)布者發(fā)布事件:EventBus.getDefault().post(newMsgEvent1(“主線程發(fā)的消息1”));一旦執(zhí)行了此方

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論