All Projects → JeremyLiao → Liveeventbus

JeremyLiao / Liveeventbus

Licence: apache-2.0
📬EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Liveeventbus

LiveDataBus
基于LiveData实现的一款不用反注册,不会内存泄露的轻量级消息总线框架,支持订阅普通事件消息和粘性事件
Stars: ✭ 17 (-99.47%)
Mutual labels:  livedata, livedatabus
Jetpack Kotlin Eyepetizer
一款基于Kotlin + Jetpack核心组件 + 协程 + 组件化实现的精美仿开眼视频App(提供Flutter、React Native、小程序版本 😁 )
Stars: ✭ 82 (-97.43%)
Mutual labels:  livedata, livedatabus
Channel
一行代码发送和接收事件LiveData|LifeCycle|Coroutine特性的事件总线框架
Stars: ✭ 108 (-96.62%)
Mutual labels:  eventbus, livedata
Unpeek Livedata
LiveData 数据倒灌:别问,问就是不可预期 - Perfect alternative to SingleLiveEvent, supporting multiple observers.
Stars: ✭ 208 (-93.48%)
Mutual labels:  eventbus, livedata
Elegantbus
🔥🔥Android 平台,基于LivaData的EventBus,无侵入,更优雅,支持跨进程,跨应用粘性事件,自定义事件等功能。
Stars: ✭ 156 (-95.11%)
Mutual labels:  eventbus, livedata
Mvvm Architecture Android Beginners
This repository contains a sample app that implements MVVM architecture using Kotlin, ViewModel, LiveData, and etc.
Stars: ✭ 176 (-94.49%)
Mutual labels:  livedata
Wandroid
首款适配玩Android、掘金、简书、CSDN、公众号文章黑夜模式,无广告,支持离线阅读,代码图片显示,关注内容本身,阅读体验升级。
Stars: ✭ 199 (-93.77%)
Mutual labels:  livedata
Android Clean Arch Coroutines Koin
Implemented by Clean Architecture, MVVM, Koin, Coroutines, Moshi, Mockk, LiveData & DataBinding
Stars: ✭ 173 (-94.58%)
Mutual labels:  livedata
Projectx
This repository might be a starting point for building Android interview tasks. There is also providing a basic sample template based on layered architecture using Dagger2 and Architecture Components.
Stars: ✭ 169 (-94.71%)
Mutual labels:  livedata
Geeknews
An MVVM practice app that uses Kotlin, DataBinding, LiveData, ViewModel and Room. The app's data source is from https://gank.io/api
Stars: ✭ 239 (-92.51%)
Mutual labels:  livedata
Mvvmframe
🏰 MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack){ Lifecycle,LiveData,ViewModel,Room } 构建的快速开发框架。有了MVVMFrame的加持,从此构建一个MVVM模式的项目变得快捷简单。
Stars: ✭ 218 (-93.17%)
Mutual labels:  livedata
Eazypermissions
Android library to handle runtime permission through Kotlin coroutines and Livedata.
Stars: ✭ 192 (-93.98%)
Mutual labels:  livedata
Readhub
ReadHub Client 非官方客户端
Stars: ✭ 179 (-94.39%)
Mutual labels:  eventbus
Android References
👏 Android 示例程序:MVP, MVVM, 组件化, AndroidX, ARouter, RxJava, EventBus, ButterKnife, 视频播放, 视频直播, 网络访问, 布局和控件整理等
Stars: ✭ 206 (-93.55%)
Mutual labels:  livedata
Fountain
Android Kotlin paged endpoints made easy
Stars: ✭ 175 (-94.52%)
Mutual labels:  livedata
Jethub
Sample App with Jetpack components(LiveData, Navigation, ViewModel) + MVVM + coroutine + single activity
Stars: ✭ 224 (-92.98%)
Mutual labels:  livedata
Androidbaseframemvvm
Android 组件化 MVVM 框架 基于 Jetpack + Kotlin
Stars: ✭ 169 (-94.71%)
Mutual labels:  livedata
Bus
🔊Minimalist message bus implementation for internal communication
Stars: ✭ 187 (-94.14%)
Mutual labels:  eventbus
Trailersapp
A simple demo project for The Movie DB based on MVVM clean architecture.
Stars: ✭ 180 (-94.36%)
Mutual labels:  livedata
Messagebus
A MessageBus (CommandBus, EventBus and QueryBus) implementation in PHP7
Stars: ✭ 178 (-94.42%)
Mutual labels:  eventbus

LiveEventBus

license version version

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

为什么要用LiveEventBus

生命周期感知
  • 消息随时订阅,自动取消订阅
  • 告别消息总线造成的内存泄漏
  • 告别生命周期造成的崩溃
范围全覆盖的消息总线解决方案
  • 进程内消息发送
  • App内,跨进程消息发送
  • App之间的消息发送
更多特性支持
  • 免配置直接使用,懒人最爱
  • 支持Sticky粘性消息
  • 支持AndroidX
  • 支持延迟发送
  • 观察者的多种接收模式(全生命周期/激活状态可接受消息)

常用消息总线对比

消息总线 延迟发送 有序接收消息 Sticky 生命周期感知 跨进程/APP 线程分发
EventBus
RxBus
LiveEventBus

想了解更多?请点击:全面了解Android消息总线

使用

1.8及以上版本全面迁移至maven,同时groupID变为io.github.jeremyliao,1.8以下版本保留JCenter

maven

  • 非AndroidX
implementation 'io.github.jeremyliao:live-event-bus:1.8.0'
  • AndroidX
implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'

JCenter

  • 非AndroidX
implementation 'com.jeremyliao:live-event-bus:1.7.3'
  • AndroidX
implementation 'com.jeremyliao:live-event-bus-x:1.7.3'

快速开始

订阅消息

  • 以生命周期感知模式订阅消息
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);

发送消息

  • 不定义消息直接发送
LiveEventBus
	.get("some_key")
	.post(some_value);
  • 先定义消息,再发送消息
public class DemoEvent implements LiveEvent {
    public final String content;

    public DemoEvent(String content) {
        this.content = content;
    }
}
LiveEventBus
        .get(DemoEvent.class)
        .post(new DemoEvent("Hello world"));

详细使用文档

获取Observable

通过name获取Observable
Observable<T> get(@NonNull String key, @NonNull Class<T> type)
Observable<Object> get(@NonNull String key)
通过event type获取Observable
<T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)

消息发送

进程内发送消息
void post(T value)
App内发送消息,跨进程使用
void postAcrossProcess(T value)
App之间发送消息
void postAcrossApp(T value)
进程内发送消息,延迟发送
void postDelay(T value, long delay)
进程内发送消息,延迟发送,带生命周期
void postDelay(LifecycleOwner sender, T value, long delay)
进程内发送消息,有序发送
void postOrderly(T value)
以广播的形式发送一个消息
  • 需要跨进程、跨APP发送消息的时候调用该方法
  • 建议尽量使用postAcrossProcess、postAcrossApp
void broadcast(T value, boolean foreground, boolean onlyInApp)

消息订阅

以生命周期感知模式订阅消息
  • 具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
以Forever模式订阅和取消订阅消息
  • Forever模式订阅消息,需要调用removeObserver取消订阅
void observeForever(@NonNull Observer<T> observer)
取消订阅消息
void removeObserver(@NonNull Observer<T> observer)
Sticky模式订阅消息
  • Sticky模式
  • 支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息。
  • 以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
Sticky模式Forever订阅消息
  • Forever模式订阅消息,需要调用removeObserver取消订阅,Sticky模式
void observeStickyForever(@NonNull Observer<T> observer)

跨进程消息

支持对基本数据类型消息的跨进程发送
  1. int
  2. float
  3. long
  4. boolean
  5. double
  6. String
支持Serializable和Parcelable类型消息的跨进程发送
  • 提供SerializableProcessor
  • 提供ParcelableProcessor
支持Bean类型消息的跨进程发送
  • 提供GsonProcessor以Gson方式提供支持
  • 需要用注解@IpcConfig指定GsonProcessor:
@IpcConfig(processor = GsonProcessor.class)

1.8及以上版本由于拆分了GsonProcessor,需要引入lebx-processor-gson

  • 非AndroidX
implementation 'io.github.jeremyliao:leb-processor-gson:x.x.x'
  • AndroidX
implementation 'io.github.jeremyliao:lebx-processor-gson:x.x.x'
支持自定义扩展
  • 实现自定义Processor,实现Processor接口
  • 用注解@IpcConfig指定自定义Processor

老版本文档

更多使用场景

SmartEventBus

SmartEventBus是一个Android平台的消息总线框架,这是一款非常smart的消息总线框架,能让你定制自己的消息总线。 SmartEventBus

在组件化中使用LiveEventBus

android-modular

配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        ...
  • lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默认值true)

  • autoClear 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)

更多配置信息,请点击:LiveEventBus的配置

混淆规则

-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.** { *; }

常见问题Q&A

Issues上最经常被提问的问题

  • Q:收不到消息怎么办?

    A:通过Console.getInfo()获取即时的调试信息,主要去观察对应的key下面有没有你关注的Observer(Console的用法

    *********Event info*********
    Event name: key_test_delay_life
        version: -1
        hasActiveObservers: true
        hasObservers: true
        ActiveCount: 1
        ObserverCount: 1
        Observers: 
            [com.jeremyliao.liveeventbus.core.LiveEventBusCore$ObserverWrapper@992681d=android.arch.lifecycle.ExternalLiveData$ExternalLifecycleBoundObserver@bc258f4]
    
  • Q:收到重复的消息怎么办?

    A:同样通过Console.getInfo()获取即时的调试信息,主要去观察有没有重复注册的Observer(Console的用法

  • Q:JCenter要关闭了,什么时候迁移?

    A:1.8及以上版本全面迁移至maven,同时groupID变为io.github.jeremyliao,1.8以下版本保留JCenter

  • Q:如何传递List或者Pair<Boolean, Double>这种泛型对象?

    A:代码上的写法有两种,供参考:

    LiveEventBus
            .get(KEY_TEST_OBSERVE_FOREVER, List.class)
            .observeForever(new Observer<List>() {
                @Override
                public void onChanged(@Nullable List list) {
                    List<String> stringList = list;
                }
            });
    
    Observable<List<String>> observable = LiveEventBus.get(KEY_TEST_OBSERVE_FOREVER);
    observable.observeForever(new Observer<List<String>>() {
        @Override
        public void onChanged(@Nullable List<String> strings) {
        }
    });
    
  • Q:项目中不用Gson库,如何去掉依赖?

    A:使用1.8以上的版本,对gson相关代码进行了拆分

若问题不能解决,请提issue。

其他分支版本

AndroidX

  • 支持AndroidX
  • 同master版本一致

classic

  • 经典实现版,整个实现就一个java文件
  • 只支持激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息
  • 不支持跨进程通信

v2

  • v2版,历史版本,已废弃
  • 为了解决非激活态不能实时收到消息的问题,采用修改LiveData源码的方式实现

示例和DEMO

文档

实现原理

质量

  • 编写了30个测试用例以确保LiveEventBus能够正常运行。
  • 具体测试用例参见LiveEventBusTest

版本

版本 功能
1.8.x 迁移至maven,拆分gson-converter
1.7.x 优化接口设计,优化实现逻辑,修复一些问题
1.6.x 优化接口设计,优化实现逻辑,修复一些问题
1.5.x 优化接口设计,使用起来更简洁
1.4.x 简化对外暴露的接口,重构核心实现,支持前后台线程调用
1.3.x 支持跨进程、跨APP通信
1.2.x 支持接收消息的模式,支持AndroidX
1.1.x 修复了一些问题
1.0.x 初版,支持基本功能

主要功能提交记录

  1. 主要功能完成(Jul 11, 2018)
  2. 支持Sticky(Aug 8, 2018)
  3. 修复在后台线程PostValue会丢失消息的问题(Aug 9, 2018)
  4. 解决发送给Stop状态Observer消息无法及时收到的问题(Aug 18, 2018)
  5. 解决了Resumed状态的Activity发生订阅,订阅者会收到订阅之前发布的消息的问题。特别感谢@MelonWXD发现了这个问题(Dec 8,2018)
  6. 在removeObserver的时候,检查livedata上有没有observer,没有则删除这个livadata,以减少内存占用。特别感谢@GreenhairTurtle提供的解决方案(Dec 27,2018)
  7. 支持设置LifecycleObserver接收消息的模式,支持在整个生命周期实时接收消息和只在激活态实时接收消息两种模式(Jan 22,2019)
  8. 支持AndroidX(Mar 8,2019)
  9. 支持跨进程、跨APP(Mar 26,2019)
  10. 简化对外暴露的接口,重构核心实现,支持前后台线程调用(Apr 4,2019)

其他

  • 欢迎提Issue与作者交流
  • 欢迎提Pull request,帮助 fix bug,增加新的feature,让LiveEventBus变得更强大、更好用

More Open Source by JeremyLiao

  1. InterfaceLoader 史上最好用的Android跨进程接口调用框架件
  2. FastSharedPreferences 一个Android平台的高性能key-value组件
  3. SmartEventBus SmartEventBus是一个Android平台的消息总线框架,这是一款非常smart的消息总线框架,能让你定制自己的消息总线。
  4. android-modular 一套Android组件化的实施方案和支撑框架
  5. DataLoader 一个Android异步数据加载框架,用于Activity打开之前预加载数据,页面启动速度优化利器

更多,请点击

深入学习Android系列,让你精通Android

Flutter系列

Kotlin系列

Gradle系列

算法系列

测试系列

招聘|抖音成都招聘|有兴趣的同学可以点进去看一下,谢谢

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].