EventBus3.0使用初体验

来源:互联网 发布:南航网络教学平台 编辑:程序博客网 时间:2024/06/06 05:52

最近因为需要使用了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
原创粉丝点击