EventBus3.0使用初体验

最近因为需要使用了greenrobot的Event3.0,我从官方的文档上看到eventbus3.0使用其实还挺简单的,但是在自己使用时总是出现这样那样的问题。官方文档的使用步骤是:1.在studio中添加依赖在buildgrad中添加compile 'org.greenrobot:eventbus:3.0.0',也可以在studio中对自己的项目右键open moduls setting


然后再出现的框中搜多eventbus找到greenrobot的添加进自己的项目即可。

2.自己构建一个类作为事件的载体我是这样理解的,这个类名字任意选取,我们接收消息就要使用这个类,类中的属性就是我们要发送和接收的内容。直接上官方的实例

public class MessageEvent {
    public final String message;

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

3.在需要接收BUS消息的地方,创建一个接收的方法,注意这个方法必须的得是公共的方法,我们就是通过这个方法接收来自其他地方传递过来的消息内容。在构建好方法后我们必须对

这个方法进行添加,注解也只有添加了注解才能收到来自其他地方post来的消息。实例如:

// This method will be called when a MessageEvent is posted
@Subscribe
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);
}

4.在接收消息的地方注册eventbus和解除注册eventbus。一般是注册在oncreat方法中,解除注册在ondestory()中,实例如:

注册我们可以直接调用默认的构造如:

 EventBus.getDefault().register(this);

解除注册实例:

 EventBus.getDefault().unregister(this);

5.在完成了以上步骤后,我们就可以在其他任何地方向接收的地方发布消息。我们只需要使用

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

就可以进行消息的发送,在发送送,发送的是我们已经定义好的对象,在接收方法中的参数也是这个对象。PS:我们发送的是什么对象我们接收方法的参数就是什么

对象。

我使用时遇到的问题:

发送的消息收不到。我遇到的问题是这样的,我是在住的activiy中向需要打开的activity所容纳的fragment发送消息。所发送的内容需要网络请求。我始终收不到消息内容,找了

半天也没有发现哪里有问题,后来自己测试了很久才找到了原因,网络请求需要一定的时间,所以在另外一个页面没有收到任何内容。我是这样处理的,我新建了一个线程

在需要收到消息的界面中,使用while死循环判断是否收到了消息,如果没有收到就不进行界面的更新,再在线程中使用runonUIthread方法进行页面的更新。

这样我就能保证我能收到消息。我的实例是这样的:

我是在碎片中需要的到消息          

new Thread() {
    public void run() {
//判断消息是否为空,不空一直判断
        while (tklist == null ||
                tklist == null ||
                tkdzlist == null ||
                gklist == null) {
        }
        
        getActivity().runOnUiThread(new Runnable() {
//更新的内容
}
这样就解决了我的问题,如果自己的需要使用很多次,可以将自己的线程假如线程池中,便于线程的管理。
 
初写博客,如果博客博客中有什么错误,希望给予批评指正,我愿意接受来自各位的意见。谢谢! 

 
       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EventBus是一种用于Android应用程序中发布/订阅事件的库。它遵循发布-订阅模式,允许不同组件之间进行松散耦合的通信。 在基于EventBus 3.0的APP开发中,你可以按照以下步骤进行: 1. 添加EventBus依赖 在项目的build.gradle文件中添加以下代码: ``` dependencies { implementation 'org.greenrobot:eventbus:3.2.0' } ``` 2. 创建事件类 创建一个事件类,它将包含你需要发送和接收的数据。例如: ``` public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } } ``` 3. 注册订阅者 在需要接收事件的组件中,注册订阅者。例如,在Activity中: ``` @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } ``` 4. 发布事件 在需要发送事件的组件中,发布事件。例如,在Activity中: ``` EventBus.getDefault().post(new MessageEvent("Hello, world!")); ``` 5. 处理事件 在订阅者中,创建一个方法来处理接收到的事件。例如,在Activity中: ``` @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { // Do something with the event Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show(); } ``` 以上就是基于EventBus 3.0的APP开发的基本步骤。通过使用EventBus,你可以轻松地在不同组件之间传递数据,从而实现应用程序中的松散耦合通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值