LiveData是17年GoogleIO大会上提出来的一个新技术。相对于通信总线类型的框架EventBus和RxBus来说,它更简单,更简洁、更解耦。

LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP

LiveDataBus优点

LiveDataBus的实现及其简单

相对EventBus复杂的实现,LiveDataBus只需要一个类就可以实现

LiveDataBus可以减小APK包的大小

LiveDataBus只依赖Android官方组件LiveData,本身实现只一个类。EventBus 57Kb、RxJava 2.2M

LiveDataBus 依赖方支持更好

LiveDataBus只依赖Android官方组件LiveData,相比RxBus依赖的RxJava和RxAndroid,依赖方支持更好

LiveDataBus具有生命周期感知

LiveDataBus具有生命周期感知,在Android系统中使用调用者不需要调用反注册,相比EventBus和RxBus使用更为方便,并且没有内存泄漏风险。

LiveEventBus的特点

生命周期感知,消息随时订阅,自动取消订阅
支持Sticky粘性消息
支持AndroidX
支持跨进程通信
支持跨APP通信
支持设置LifecycleObserver(如Activity)接收消息的模式:

1.整个生命周期(从onCreate到onDestroy)都可以实时收到消息
2.激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息

在工程中引用
implementation 'com.jeremyliao:live-event-bus:1.4.2'

配置
在 Application.onCreate 方法中配置:

LiveEventBus.get()
.config()
.supportBroadcast(this)
.lifecycleObserverAlwaysActive(true);

具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver

保证 with() 中的key值相同,(注册/接收)和发起通信

注册:

LiveEventBus.get().with("LiveDataBusDemo1",String.class).observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
}
});

发起通信

LiveEventBus.get().with("LiveDataBusDemo1").post("LiveDataBus1");

以Forever模式订阅和取消订阅消息,Forever模式订阅消息,需要手动调用removeObserver取消订阅

注册

private Observer<String> observer = new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeForever注册的观察者收到消息: " + s);
}
}; LiveEventBus.get()
.with("LiveDataBusDemo2", String.class)
.observeForever(observer);

发起通信

LiveEventBus.get().with("LiveDataBusDemo2").post("LiveDataBus2");

手动取消订阅消息

LiveEventBus.get()
.with("LiveDataBusDemo2", String.class)
.removeObserver(observer);

Sticky模式(可以接收 前面/未注册之前 发起通信的信息)

支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息,当然也支持后面发送的信息

以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver

注册

LiveEventBus.get()
.with("LiveDataBusDemo3", String.class)
.observeSticky(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeSticky注册的观察者收到消息: " + s);
}
});

发起通信(你可以在注册之前和注册之后分辨发起通知看效果)

LiveEventBus.get().with("LiveDataBusDemo3").post("LiveDataBus3");

observeStickyForever,Forever模式订阅消息,需要手动调用removeObserver取消订阅,和上面的一样

注册

private Observer<String> observer = new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Log.i("aaa",s);
textView.setText("observeStickyForever注册的观察者收到消息: " + s);
}
}; LiveEventBus.get()
.with("LiveDataBusDemo4", String.class)
.observeStickyForever(observer);

发起通信

LiveEventBus.get().with("LiveDataBusDemo4").post("LiveDataBus4");

手动取消订阅消息

LiveEventBus.get()
.with("LiveDataBusDemo4", String.class)
.removeObserver(observer);

混淆规则

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

参考文档:
https://github.com/JeremyLiao/LiveEventBus

android -------- LiveDataBus的使用的更多相关文章

  1. Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

    背景 对于Android系统来说,消息传递是最基本的组件,每一个App内的不同页面,不同组件都在进行消息传递.消息传递既可以用于Android四大组件之间的通信,也可用于异步线程和主线程之间的通信.对 ...

  2. Android组件化方案及组件消息总线modular-event实战

    背景 组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向.美团内部各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产 ...

  3. 【干货推荐】Android开发该学习哪些东西?

    开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方 ...

  4. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  5. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  6. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  7. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  8. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

随机推荐

  1. WPF 依赖属性前言

    WPF 依赖属性前言 ​ 在.net中,我们可以属性来获取或设置字段的值,不需要在编写额外的get和set方法,但这有一个前提,那就是需要在对象中拥有一个字段,才能在此字段的基础上获取或设置字段的值, ...

  2. 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别

    什么是数据仓库 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH.数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合.它出于分析性报告和决策支持目的而创建. ...

  3. Docker搭建私用仓库

    搭建私有仓库 # 1.查找registry,官方的私用仓库镜像 docker search registry # 2.下载私有仓库镜像 docker pull registry # 3.创建并后台运行 ...

  4. ubuntu 下 VNC Viewer 通过网线连接树莓派的网络设置

    1 本机环境 Ubuntu 19.10 Raspberry 3B+ (Raspbian.开启了 vnc 服务) 2 Ubuntu 网络设置 1. Identity 下选择 Mac Address(如: ...

  5. MySQL/MariaDB数据库的各种日志管理

    MySQL/MariaDB数据库的各种日志管理 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.事务日志 (transaction log) 1>.Innodb事务日志相 ...

  6. 史上最完整promise源码手写实现

    史上最完整的promise源码实现,哈哈,之所以用这个标题,是因为开始用的标题<手写promise源码>不被收录 promise自我介绍 promise : "君子一诺千金,承诺 ...

  7. Linux UART介绍

    1. UART介绍 UART是一类tty设备, 是一种串行端口终端, 具体可参考<UART接口介绍>在Linux中UART属于tty驱动的一部分, 具体实现包括驱动抽象层和硬件实现层 本文 ...

  8. Python应用之-修改通讯录

    #-*- coding:utf-8 -*- import sqlite3 #打开本地数据库用于存储用户信息 conn = sqlite3.connect('mysql_person.db') #在该数 ...

  9. A - Happy Birthday, Polycarp!

    Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) A. Happy Birthday, Polyc ...

  10. c++ main函数

    vs 2015的运行环境 1.参数 int main(int argc, char* argv[]) 1)两个参数的类型是固定的,但参数名可以是符合命名规则的任何命名 2)argv[0]为执行文件的路 ...