EventBus使用及优点

 

Android studio 上如何使用EventBus


第一步:导入第三方包

//eventBus所需要的包
compile 'de.greenrobot:eventbus:3.0.0-beta1'
2、新建Event类,根据项目需求,构建不同的Event类
public class FirstEvent {
    public String message;
    public FirstEvent(String message) {
        this.message = message;
    }
}
3、发布事件
private void initView(){
    btn=(Button)findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EventBus.getDefault().post(new AnyEvent("nothing is impossible!"));
        }
    });
}

4、在订阅事件的activity上注册(在oncreate()/onresume()中注册,务必在ondestroy()/onpause()中取消注册)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    //注册
    EventBus.getDefault().register(this);
}


5、订阅事件,有四种可选方式接收事件:

     在3.0之前,EventBus还没有使用注解方式。消息处理的方法也只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,分别代表四种线程模型。而在3.0之后,消息处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为PostThread),四种线程模型,下面会讲到。
注意,事件处理函数的访问权限必须为public,否则会报异常。

onEvent();        ------------------------->接收事件和分发事件在同一个线程中执行

onEventMainThread();     ----------->接收事件永远在UI线程执行

onEventBackgroundThread();  --->分发事件在UI线程?启动子线程运行接收事件:在分发线程接收事件

onAsync();       ------------------------->直接另起线程接收事件

/**
 * 使用onEvent来接收事件,那么接收事件和分发事件在一个线程中执行
 * @param event
 */
public void onEvent(AnyEvent event) {
}
/**
 * 使用onEventMainThread来接收事件,那么不论分发事件在哪个线程运行,接收事件永远在UI线程执行
 * 可以用来更新UI
 * @param event
 */
public void onEventMainThread(AnyEvent event) {
}

/**
 * 使用onEventBackgroundThread来接收事件,如果分发事件在子线程运行,那么接收事件直接在同样线程
 * 运行,如果分发事件在UI线程,那么会启动一个子线程运行接收事件
 * @param event
 */
public void onEventBackgroundThread(AnyEvent event) {
}
/**
 * 使用onEventAsync接收事件,无论分发事件在(UI或者子线程)哪个线程执行,接收都会在另外一个子线程执行
 * @param event
 */
public void onEventAsync(AnyEvent event) {
}

6、在订阅事件的activity上取消注册(在oncreate()/onresume()中注册,务必在ondestroy()/onpause()中取消注册)
@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
 
  
优点:
    采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。
举个例子,比如有两个界面,ActivityA和ActivityB,从ActivityA界面跳转到ActivityB界面后,ActivityB要给ActivityA发送一个消息,ActivityA收到消息后在界面上显示出来。我们最先想到的方法就是使用广播,使用广播实现此需求的代码如下:
首先需要在ActivityA中定义一个广播接收器:






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值