EventBus是Android的一个开源项目,它最重要的功能就是可以简化各个组件之间的消息传递,类似于Android自身的广播。但又比广播使用起来方便的多的多。

github地址:https://github.com/greenrobot/EventBus
官方文档:http://greenrobot.org/eventbus/documentation

1.在Android studio中
在build.gradle中添加

compile 'de.greenrobot:eventbus:2.4.0'

或在eclipse中
导入EventBus的jar包,直接将jar拷到工程目录的libs文件夹下即可。

这里写图片描述

2.定义一个MessageEvent类
这个类是一个普通的Object,没有任何特殊,我们用它作为消息传递的载体。

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

3.注册EventBus。
在要接收消息的Activity或Fragmen或Service中注册EventBus。
我们可以在onCreate中进行注册,下面在Activity中的onCreat中进行注册,方法如下

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //进行EventBus的注册        EventBus.getDefault().register(this); }

4.发送消息。
发送消息是在要发送消息的Activity或Fragmen或Service中使用EventBus中的Post方法来实现发送的,发送过去的是我们新建的类的实例!

EventBus.getDefault().post(new MessageEvent("发送消息"));

5.接收消息。
在要接收消息的Activity或Fragmen或Service中复写框架中的前缀为onEvent方法,此方法有四种,按需求复写即可。一般情况下只需定义下面的第一种即可。

(1)我们只用定义这个方法就好,它并不是一个接口什么的,也不需要其他任何操作。这个方法执行在哪个线程是由post方法的那个线程决定的,它执行在哪个线程onEvent就执行在哪个线程,方法如下:

public void onEvent(MessageEvent event){      Toast.makeText(getActivity(),event.message,    Toast.LENGTH_SHORT).show();  }  

(2)如果我们现在想收到消息的时候将它保存起来,那么我们可以直接定义如下的一个方法:

public void onEventBackgroundThread(MessageEvent event){      saveToDisk(event.message);  } 

(3)下面这个方法会执行在主线程之外的某个子线程,如果post方法本身就是子线程,那么就与post方法执行在同一线程,需要注意的是,当多个post时,它不会主动新开线程,只会按顺序挨个执行,因此可以保证我们消息都按顺序保存了的。那如果我们想每次收到消息都新开一个线程来执行呢?只需定义如下的方法就好:

public void onEventAsync(MessageEvent event){      backend.send(event.message);  } 

(4)下面这个方法执行在于post及主线程都不相同的线程内。每次post都会新开一个线程。使用该方法时应考虑该方法触发的次数,千万别让线程过多,导致资源消耗过大。最后,最常用的,假如我们想在接受消息的时候更新UI,因为UI只能在主线程进行更新,因此我们希望接收到消息的方法执行在主线程,那么,我们可以直接定义一个如下的方法。

public void onEventMainThread(MessageEvent event) {      textField.setText(event.message);  }  

5.注销EventBus。
在要接收消息的Activity或Fragmen或Service中进行注销,重写onDestroy( )方法

@Override   protected void onDestroy(){      super.onDestroy();      EventBus.getDefault().unregister(this);  } 

更多相关文章

  1. Android EditText TextWatcher 回调方法参数说明
  2. Android 开发中的多线程编程技术
  3. Android生成界面的两种方法:setContentView和inflate的区别
  4. Android 使用Canvas在图片上绘制文字的方法
  5. Android 项目快速更改包名的方法
  6. 『ANDROID』 在Android开发过程中,常Android 更新UI的两种方法—

随机推荐

  1. android 之 selector
  2. Android驱动程序开发实例精讲-0_Android
  3. Android Studio http proxy And SDK Mana
  4. Android Studio 获取数字签名信息
  5. (原创)Android手动回收bitmap,引发Canvas
  6. androidのMMS短信发送过程(三)
  7. JS判断设备终端(PC,iPad,iPhone,android,winPh
  8. Android连接SQLite数据库
  9. 【Android开发小记--6】动画--属性动画以
  10. android应用程序组件之间的通讯