新聞中心
一.EventBus概述
1.EventBus的三要素
EventBus有三個(gè)主要的元素需要我們先了解一下:
Event:事件,可以是任意類(lèi)型的對(duì)象。
Subscriber:事件訂閱者,在EventBus3.0之前消息處理的方法只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,他們分別代表四種線程模型。而在EventBus3.0之后,事件處理的方法可以隨便取名,但是需要添加一個(gè)注解@Subscribe,并且要指定線程模型(默認(rèn)為POSTING),四種線程模型下面會(huì)講到。
Publisher:事件發(fā)布者,可以在任意線程任意位置發(fā)送事件,直接調(diào)用EventBus的post(Object)方法。可以自己實(shí)例化EventBus對(duì)象,但一般使用EventBus.getDefault()就好了,根據(jù)post函數(shù)參數(shù)的類(lèi)型,會(huì)自動(dòng)調(diào)用訂閱相應(yīng)類(lèi)型事件的函數(shù)。
2.EventBus的四種ThreadMode(線程模型)
EventBus3.0有以下四種ThreadMode:
POSTING(默認(rèn)):如果使用事件處理函數(shù)指定了線程模型為POSTING,那么該事件在哪個(gè)線程發(fā)布出來(lái)的,事件處理函數(shù)就會(huì)在這個(gè)線程中運(yùn)行,也就是說(shuō)發(fā)布事件和接收事件在同一個(gè)線程。在線程模型為POSTING的事件處理函數(shù)中盡量避免執(zhí)行耗時(shí)操作,因?yàn)樗鼤?huì)阻塞事件的傳遞,甚至有可能會(huì)引起ANR。
MAIN:事件的處理會(huì)在UI線程中執(zhí)行。事件處理時(shí)間不能太長(zhǎng),長(zhǎng)了會(huì)ANR的。
BACKGROUND:如果事件是在UI線程中發(fā)布出來(lái)的,那么該事件處理函數(shù)就會(huì)在新的線程中運(yùn)行,如果事件本來(lái)就是子線程中發(fā)布出來(lái)的,那么該事件處理函數(shù)直接在發(fā)布事件的線程中執(zhí)行。在此事件處理函數(shù)中禁止進(jìn)行UI更新操作。
ASYNC:無(wú)論事件在哪個(gè)線程發(fā)布,該事件處理函數(shù)都會(huì)在新建的子線程中執(zhí)行,同樣,此事件處理函數(shù)中禁止進(jìn)行UI更新操作。
二.EventBus的基本用法
1.自定義一個(gè)事件類(lèi)(相當(dāng)于我們平常所用的bean類(lèi))
public class MessageEvent { ... }
本文題目:android事件總線EventBus3.0使用方法詳解-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://ef60e0e.cn/article/hdhhs.html