EventBus 知识点总结

随着RxJava 的火爆,RxBus 相对来说比较配套,我不知道还会不会用eventBus 但是谁知道呢,总结一下备忘还是不错的选择。

http://greenrobot.org/eventbus/

  

使用eventBus的好处

EventBus:活动为Android

EventBus是使用Android的开放源码库发布/订阅为松耦合模式。EventBus使得脱钩类与代码,只需几行中央通信-简化了代码,消除依赖关系,并加快应用开发。

使用你的好处EventBus:这...

  • 简化组件之间的通信
  • 解耦事件发送者和接收者
  • 与活动,片段,和后台线程表现良好
  • 避免了复杂且容易出错的依赖关系和生命周期问题
  • 快; 专为高性能而优化
  • 很小(<50K JAR)
  • 在实践中被证明与应用程序安装100,000,000+
  • 拥有先进的功能,如交付线程,用户优先级等。

添加:

compile ‘org.greenrobot:eventbus:3.0.0‘

第1步:定义事件

事件是POJO(简单Java对象)没有任何特殊要求。

public class MessageEvent {
    public final String message;
    public MessageEvent(String message) {
        this.message = message;
    }
}

2.Prepare subscribers(准备订阅)

// This method will be called when a MessageEvent is posted (in the UI thread for Toast)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

// This method will be called when a SomeOtherEvent is posted
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
    doSomethingWith(event);
}

//定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:

//onEvent 它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行

//onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI

//onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么回调函数就在这个子线程执行。

//onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。

3.注册事件 反注册事件

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

4.发送事件

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
时间: 2024-08-24 05:12:03

EventBus 知识点总结的相关文章

Android EventBus框架(二)之源码简单解析

上一篇,我们基本知道了EventBus的使用步骤,接下来先简单研究一下其中的源码.在分析源码之前,我们先回顾一下Java反射的知识点: JAVA反射机制 基本定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Sun为提供的关于反射机制中的类: java.lang.Class; java.lang.reflect.Construct

EventBus使用之基础

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 开源项目链接 EventBus项目:https://github.com/greenrobot/EventBus EventBusDemo下载:https://github.com/yanbober/Android-Blog-Source/tree/master/Android-EventBus-Demo 背景介绍 如果你学习过设计模式,那么当想通知其他组件某些事

EventBus框架库代码走读

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 本篇继续接上一篇,阅读上一篇EventBus使用之基础 背景 开始分析EventBus前可以下看下EventBus开源框架的工程目录结构: 从上图可以发现,其实EventBus的代码量不是很大,还是很方便入手分析的. 开始分析 通过上一篇基础使用可以发现,使用EventBus框架第一步是得到

阿里程序员的2019Android年终盘点,必备技能知识点,程序员必须收藏

临近年末,回顾总结2019,很多从事Android开发的朋友仍然遇到了很多困难,无法实现突破. 本文旨在通过以下知识点总结 希望能帮助上述陷入移动开发困境的朋友.所以接下来本篇文章主要介绍 Android 开发中的部分知识点,本文节选自阿里巴巴开发手册,下载地址.文末还有 高级架构技术进阶脑图.Android开发面试专题资料,高级进阶架构资源 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习,通过阅读本篇文章,您将收获以下内容: 一.Java 语言规范二.

H5移动端知识点总结

移动开发基本知识点 一. 使用rem作为单位html { font-size: 100px; }@media(min-width: 320px) { html { font-size: 100px; } }@media(min-width: 360px) { html { font-size: 112.5px; } }@media(min-width: 400px) { html { font-size: 125px; } }@media(min-width: 640px) { html { f

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

JavaScript一些重要知识点结合题目的表现!

function Foo() { //① 声明一个Foo的函数 getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; ② 为Foo创建一个叫getName的静态属性存储一个匿名函数 Foo.prototype.getName = function () { alert (3);}; ③为Foo的原型对象创建一个叫getName的匿名函数 var getName =