一,概述

Android optimized event bus that simplifies communication between 
Activities, Fragments, Threads, Services, etc. Less code, better
quality.

上面这几行英文是给github官方给出的说法,那么我们翻译过来是大致就是说:

EventBus是一款针对Android优化的发布/订阅事件总线,简化了安卓事件之间的通信,可以替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅,质量更好。

下载EventBus的链接
https://github.com/greenrobot/EventBus

二,基本用法

这个图片可以很清晰的说明EventBus的执行流程,没当我不明白的时候,都会在看看这个流程图

EventBus in 3 steps

使用一共分为三个步骤

//定义一个事件
Define events:
public class MessageEvent { /* Additional fields if needed */ }

//准备一个订阅者
Prepare subscribers
Register your subscriber (in your onCreate or in a constructor):
eventBus.register(this);

Declare your subscribing method:
@Subscribe
public void onEvent(AnyEventType event) {/* Do something */};

//发布一个事件
Post events:
eventBus.post(event);
This getting started guide shows these 3 steps in more detail

那么这个开源框架的使用也是很简单的,一共分为以上三个步骤,只要我们一步一步来,肯定是没有问题的,那么我们就先来做一个小的demo来试试,任何大的项目都是小的知识点累加成的,只要我们掌握了每一个知识点,才能做好每一个大的项目。

三,实例

1 自定义一个类,可以是空的

public class TextEvent {

public String msg;

public TextEvent(String msg) {
this.msg = msg;
}
}

2 准备一个订阅者 发送者,为了简单起见,我只是在主方法中定义了一个按钮

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


//设置按钮的点击事件
findViewById(R.id.bt_post).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextEvent event = new TextEvent("Hello World");
EventBus.getDefault().post(event);
}
});
EventBus.getDefault().register(this);
}

/**
* Declare your subscribing method
* 声明自己的订阅方法
*
* @param event
*/
@Subscribe
public void onEvent(TextEvent event) {
Toast.makeText(this, event.msg, Toast.LENGTH_SHORT).show();
}
}

简单来讲上面代码都做了些什么事情,首先在主方法中点击按钮之后,会发布一个事件,这个事件会调用下面我们声明的订阅方法,然后会在屏幕中弹出一个我们定义的土司

四,错误

我们在第一次使用的时候,很可能会出现像下面这个的报错,那么是为什么呢?

仔细看这个错误,提示我们需要在回调的方法中加上一个注解

那么我们千万不能疏忽了,要在我们最后的回调方法上面加上那句注解,@Subscribe

05-06 23:38:38.622 9391-9391/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.itheima.demo, PID: 9391
java.lang.RuntimeException: Unable to start activity ComponentInfo
{com.itheima.demo/com.itheima.demo.MainActivity}:
org.greenrobot.eventbus.EventBusException: Subscriber class
com.itheima.demo.MainActivity and its super classes have no public
methods with the @Subscribe annotation

ps :

好了,那么这就是EventBus的简单实用,每当我们学习使用一个新的开源框架的时候,一定要从最简单的开始,看着官方给出的文档,一步一步来,肯定是可以搞定的。

更多相关文章

  1. Android中RecyclerView的item中控件的点击事件添加删除一行、上
  2. Android Studio 出现 Gradle's dependency cache may be corrupt
  3. Android Service使用方法--简单音乐播放实例
  4. 绑定本地Service和远程Service并调用其中方法
  5. android 屏幕触摸事件及处理机制解读
  6. Android事件分发机制(下)
  7. "AndroidStudio 单元测试"-最简单最快的方法-ApplicationTest
  8. android在onCreate()方法中获取View的宽度与高度的方法实战
  9. W/System.err:at java.net.PlainDatagramSocketImpl.bind(PlainDa

随机推荐

  1. php统计2个数据中同时出现的次数最多的单
  2. var_export与var_dump的不同
  3. php利用mkdir()函数创建多级目录
  4. php中字符串和整数比较
  5. PHP最强大的随机字符串生成函数
  6. 关于PHP你可能不知道的-PHP的事件驱动化设
  7. PHP中 stripslashes() 函数 和 addslashe
  8. php图像裁剪服务器搭建
  9. php递归经典案例
  10. 命令行下可以跑PHP脚本,但是通过浏览器却