Android EventBus在Activity、Fragment、Service中的使用

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);  
}  

6.注销EventBus。

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

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

————————————————
转载于:https://blog.csdn.net/a373595475/article/details/78369817

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值