美文网首页
简易的不一样的LiveEventBus

简易的不一样的LiveEventBus

作者: youxiaochen | 来源:发表于2020-08-28 19:46 被阅读0次

前言:支持粘性与普通消息事件,支持Lifecycle,既然是LiveData当然就支持DataBinding, 不支持广播消息(与LiveData无关)也不做过多的包装,就直接使用LiveData发送与接收

1:事件源

有大神写的一个LiveEventBus, 一个事件可以注册普通事件接收与粘性事件传递者, 但是在只注册普通事件接收时,生命周期结束自动管理时粘性事件也随之消除, 所以这里将事件源分出粘性事件源与普通事件源, 普通事件源只能注册普通事件接收, 粘性事件源只能注册粘性事件接收

/**
 *  create by you 2019-03
 *  普通事件
 * @param <T>
 */
public class LiveDataEvent<T> extends LiveData<T> {
    /**
     * 接收事件的级别, 默认为CREATED, 也可以设置 STARTED, RESUMED
     */
    @NonNull
    Lifecycle.State activeLevel;

**
 *  create by you 2019-03
 *  粘性事件
 * @param <T>
 *
 */
public class LiveDataStickyEvent<T> extends LiveData<T> {
    /**
     * 接收事件的级别, 默认为CREATED, 也可以设置 STARTED, RESUMED
     */
    @NonNull
    Lifecycle.State activeLevel;

2:保持原有的LiveData, 这样可以直接在ViewDataBinding中使用, 因为在ViewDataBinding中使用LiveData会自动的注册接收Observer到LivecyclerOwner与移除Observer, 如此将事件再封装就没有了这个特性,

binding.setEvent(LiveEventBus.with(EventConstants.testEvent, String.class));
binding.setLifecycleOwner(this);
这里的消息事件就可以直接显示到界面中,也不用自己手动管理

3:支持传递事件中的Lifecycle.State等级,不同的事件可以使接收者有不同的生命周期感知等级, 比如通常使用Lifecycle.State.CREATED时就可以接收消息, 也可以在STARTED, RESUMED时再接收消息, 注册时传入参数即可

    /**
     * 获取普通事件
     * @param key
     * @param type
     * @param <T>
     * @return
     */
    <T> LiveDataEvent<T> getEvent(String key, Class<T> type);

    <T> LiveDataEvent<T> getEvent(String key, Lifecycle.State activeLevel, Class<T> type);

    /**
     * 获取粘性事件
     * @param key
     * @param type
     * @param <T>
     * @return
     */
    <T> LiveDataStickyEvent<T> getStickyEvent(String key, Class<T> type);

    <T> LiveDataStickyEvent<T> getStickyEvent(String key, Lifecycle.State activeLevel, Class<T> type);
附上源码https://github.com/youxiaochen/LiveEventBus
有错误或不足之处欢迎指教

相关文章

  • 简易的不一样的LiveEventBus

    前言:支持粘性与普通消息事件,支持Lifecycle,既然是LiveData当然就支持DataBinding, 不...

  • LiveEventBus的使用

    一、前言: LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持...

  • LiveEventBus的使用

    一、前言: LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持...

  • 封装LiveData实现跨界面处理消息

    livedata的妙用 public final class LiveEventBus { private fin...

  • LiveEventBus阉割版

    https://github.com/JeremyLiao/LiveEventBus github上面的LiveE...

  • JetPacks之数据传递工具

    相比RxBus,EventBus,LiveData有个非常简单的LiveEventBus参考文章类似github ...

  • toast提示信息处理

    什么是toast提示信息? toast:Android中的Toast是一种简易的消息提示框。 和Dialog不一样...

  • iOS图片选择器

    简易图片选择 HBPhotoPicker 简易图片选择 HBPhotoPicker 简易图片选择 HBPho...

  • Python定位toast方法

    1、什么是toast? Toast是一种简易的消息提示框。和Dialog不一样的是,它永远不会获得焦点,无法被点...

  • 简易的jQuery

    @(Inbox) 本文会用最简单的形式来模仿jQuery源码。 jQuery看着是什么样子的? $(美元符号)是j...

网友评论

      本文标题:简易的不一样的LiveEventBus

      本文链接:https://www.haomeiwen.com/subject/fiqrsktx.html