LiveEventBus的使用

一漩勤、前言:

LiveEventBus是一款A(yù)ndroid消息總線(xiàn)感挥,基于LiveData,具有生命周期感知能力越败,支持Sticky触幼,支持AndroidX,支持跨進(jìn)程究飞,支持跨APP置谦。

為什么要用LiveEventBus?

1、生命周期感知
  • 消息隨時(shí)訂閱亿傅,自動(dòng)取消訂閱
  • 告別消息總線(xiàn)造成的內(nèi)存泄漏
  • 告別生命周期造成的崩潰
2媒峡、范圍全覆蓋的消息總線(xiàn)解決方案
  • 進(jìn)程內(nèi)消息發(fā)送
  • App內(nèi),跨進(jìn)程消息發(fā)送
  • App之間的消息發(fā)送
3葵擎、 更多特性支持
  • 免配置直接使用谅阿,懶人最?lèi)?ài)
  • 支持Sticky粘性消息
  • 支持AndroidX
  • 支持延遲發(fā)送
  • 觀察者的多種接收模式(全生命周期/激活狀態(tài)可接受消息)

4、 常用消息總線(xiàn)對(duì)比
消息總線(xiàn) 延遲發(fā)送 有序接收消息 Sticky 生命周期感知 跨進(jìn)程/APP 線(xiàn)程分發(fā)
EventBus ? ? ? ? ? ?
RxBus ? ? ? ? ? ?
LiveEventBus ? ? ? ? ? ?

想了解更多酬滤?請(qǐng)點(diǎn)擊:全面了解Android消息總線(xiàn)

demo下載:https://github.com/JeremyLiao/LiveEventBus.git

二奔穿、使用:

1、依賴(lài):

Via Gradle:

implementation 'com.jeremyliao:live-event-bus:1.7.2'

For AndroidX:

implementation 'com.jeremyliao:live-event-bus-x:1.7.2'

2敏晤、訂閱消息

  • 以生命周期感知模式訂閱消息
LiveEventBus
    .get("some_key", String.class)
    .observe(this, new Observer<String>() {
        @Override
        public void onChanged(@Nullable String s) {
        }
    });
  • 以Forever模式訂閱消息
LiveEventBus
    .get("some_key", String.class)
    .observeForever(observer);

3、發(fā)送消息

  • 不定義消息直接發(fā)送
LiveEventBus
    .get("some_key")
    .post(some_value);
  • 先定義消息缅茉,再發(fā)送消息
//定義類(lèi)型
public class DemoEvent implements LiveEvent {
    public final String content;

    public DemoEvent(String content) {
        this.content = content;
    }
}
//發(fā)送消息
LiveEventBus
        .get(DemoEvent.class)
        .post(new DemoEvent("Hello world"));

4嘴脾、在Application.onCreate方法中配置:

  LiveEventBus
             .config()
             .autoClear(true)
             .lifecycleObserverAlwaysActive(true);
  • lifecycleObserverAlwaysActive
    配置LifecycleObserver(如Activity)接收消息的模式(默認(rèn)值true):
    true:整個(gè)生命周期(從onCreate到onDestroy)都可以實(shí)時(shí)收到消息
    false:激活狀態(tài)(Started)可以實(shí)時(shí)收到消息,非激活狀態(tài)(Stoped)無(wú)法實(shí)時(shí)收到消息蔬墩,需等到Activity重新變成激活狀態(tài)译打,方可收到消息

  • autoClear
    配置在沒(méi)有Observer關(guān)聯(lián)的時(shí)候是否自動(dòng)清除LiveEvent以釋放內(nèi)存(默認(rèn)值false)

  • setJsonConverter
    配置JsonConverter(默認(rèn)使用gson)

  • setLogger
    配置Logger(默認(rèn)使用DefaultLogger)

  • enableLogger
    配置是否打印日志(默認(rèn)打印日志)

  • setContext
    如果廣播模式有問(wèn)題,請(qǐng)手動(dòng)傳入Context拇颅,需要在application onCreate中配置

三奏司、詳細(xì)使用文檔

1、 獲取Observable

  • 通過(guò)name獲取Observable
Observable<T> get(@NonNull String key, @NonNull Class<T> type)

Observable<Object> get(@NonNull String key)

  • 通過(guò)event type獲取Observable
<T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)

2樟插、 消息發(fā)送

進(jìn)程內(nèi)發(fā)送消息
void post(T value)
App內(nèi)發(fā)送消息韵洋,跨進(jìn)程使用
void postAcrossProcess(T value)
App之間發(fā)送消息
void postAcrossApp(T value)
進(jìn)程內(nèi)發(fā)送消息,延遲發(fā)送
void postDelay(T value, long delay)
進(jìn)程內(nèi)發(fā)送消息黄锤,延遲發(fā)送搪缨,帶生命周期
void postDelay(LifecycleOwner sender, T value, long delay)
進(jìn)程內(nèi)發(fā)送消息,有序發(fā)送
void postOrderly(T value)
以廣播的形式發(fā)送一個(gè)消息
  • 需要跨進(jìn)程鸵熟、跨APP發(fā)送消息的時(shí)候調(diào)用該方法
  • 建議盡量使用postAcrossProcess副编、postAcrossApp
void broadcast(T value, boolean foreground, boolean onlyInApp)

3、 消息訂閱

以生命周期感知模式訂閱消息
  • 具有生命周期感知能力流强,LifecycleOwner銷(xiāo)毀時(shí)自動(dòng)取消訂閱痹届,不需要調(diào)用removeObserver
void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
以Forever模式訂閱和取消訂閱消息
  • Forever模式訂閱消息呻待,需要調(diào)用removeObserver取消訂閱
void observeForever(@NonNull Observer<T> observer)
取消訂閱消息
void removeObserver(@NonNull Observer<T> observer)
Sticky模式訂閱消息
  • Sticky模式
  • 支持在訂閱消息的時(shí)候設(shè)置Sticky模式,這樣訂閱者可以接收到之前發(fā)送的消息队腐。
  • 以Sticky模式訂閱消息蚕捉,具有生命周期感知能力,LifecycleOwner銷(xiāo)毀時(shí)自動(dòng)取消訂閱香到,不需要調(diào)用removeObserver
void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
Sticky模式Forever訂閱消息
  • Forever模式訂閱消息鱼冀,需要調(diào)用removeObserver取消訂閱,Sticky模式
void observeStickyForever(@NonNull Observer<T> observer)

4悠就、 跨進(jìn)程消息

支持對(duì)基本數(shù)據(jù)類(lèi)型消息的跨進(jìn)程發(fā)送
  1. int
  2. float
  3. long
  4. boolean
  5. double
  6. String
支持Serializable和Parcelable類(lèi)型消息的跨進(jìn)程發(fā)送
  • 提供SerializableProcessor
  • 提供ParcelableProcessor
支持Bean類(lèi)型消息的跨進(jìn)程發(fā)送
  • 提供GsonProcessor以Gson方式提供支持
  • 需要用注解@IpcConfig指定GsonProcessor:
@IpcConfig(processor = GsonProcessor.class)
支持自定義擴(kuò)展
  • 實(shí)現(xiàn)自定義Processor慎式,實(shí)現(xiàn)Processor接口
  • 用注解@IpcConfig指定自定義Processor

5、 配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        ...

  • lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默認(rèn)值true)

  • autoClear 配置在沒(méi)有Observer關(guān)聯(lián)的時(shí)候是否自動(dòng)清除LiveEvent以釋放內(nèi)存(默認(rèn)值false)

更多配置信息禁筏,請(qǐng)點(diǎn)擊:LiveEventBus的配置

6繁涂、混淆規(guī)則

-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class android.arch.lifecycle.** { *; }
-keep class android.arch.core.** { *; }

for androidx:

-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class androidx.lifecycle.** { *; }
-keep class androidx.arch.core.** { *; }

參考:https://github.com/JeremyLiao/LiveEventBus

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市炸茧,隨后出現(xiàn)的幾起案子瑞妇,更是在濱河造成了極大的恐慌,老刑警劉巖梭冠,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辕狰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡控漠,警方通過(guò)查閱死者的電腦和手機(jī)蔓倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盐捷,“玉大人偶翅,你說(shuō)我怎么就攤上這事〉锒桑” “怎么了聚谁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滞诺。 經(jīng)常有香客問(wèn)我形导,道長(zhǎng),這世上最難降的妖魔是什么习霹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任骤宣,我火速辦了婚禮,結(jié)果婚禮上序愚,老公的妹妹穿的比我還像新娘憔披。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布芬膝。 她就那樣靜靜地躺著望门,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锰霜。 梳的紋絲不亂的頭發(fā)上筹误,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音癣缅,去河邊找鬼厨剪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛友存,可吹牛的內(nèi)容都是我干的祷膳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屡立,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼直晨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起膨俐,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勇皇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后焚刺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體敛摘,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年乳愉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了着撩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匾委,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氓润,到底是詐尸還是另有隱情赂乐,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布咖气,位于F島的核電站挨措,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崩溪。R本人自食惡果不足惜浅役,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伶唯。 院中可真熱鬧觉既,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至符欠,卻和暖如春嫡霞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背希柿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诊沪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曾撤。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓端姚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盾戴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寄锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354