您的位置:首页 > 移动开发 > Android开发

Android EventBus学习

2015-10-20 17:55 387 查看
最新看到有提到EventBus,听说使用该方法,好处多多,jar包很小,就试着学习。
http://blog.csdn.net/richie0006/article/details/47072283
参考文章写的很详细了,总结如下

基本使用

(1)自定义一个类,可以是空类,比如:

public class AnyEventType {


public AnyEventType(){}

}

(2)在要接收消息的页面注册:

eventBus.register(this);

(3)发送消息

eventBus.post(new AnyEventType event);

(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):

public void onEvent(AnyEventType event) {}


(5)解除注册

eventBus.unregister(this);

事件接收函数有四个,区别如下:
onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。

onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

在文章中介绍到,发送的事件不同,需要设置参数类型不同的接收函数,我回到源码看了下,发现源码的事件发送函数为:

public void post(Object event)
我想既然事件发送函数类型可以为Object,为什么接收函数不可以设置同样的参数呢?所以稍微改了一下OnEvent的接收函数,发现确实可行。

具体代码如下:

 public void onEvent(Object event){

        String msg = "onEvent 我们收到了消息:";
        System.out.println("FirstActivity.onEvent");
        System.out.println("FirstActivity.onEvent :" + event.getClass().getSimpleName());

        switch (event.getClass().getSimpleName()){
            case "FirstEvent":
                msg +=   ((FirstEvent)event).getMsg();
                break;
            case "SecondEvent":
                msg +=   ((SecondEvent)event).getMsg();
                break;
            default:
                break;
        }

        Log.d("EventBus", msg);
    }

实验基于原博文,所以其他代码及布局文件不再详述,在第二个Activity中发送不同Event类型事件,接收后打印如下:

10-20 18:07:14.789  24869-24869/com.example.hornsey.myapplication I/System.out﹕ SecondActivity.onClick
10-20 18:07:14.799  24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent
10-20 18:07:14.799  24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :FirstEvent
10-20 18:07:14.799  24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick

10-20 18:07:18.419  24869-24869/com.example.hornsey.myapplication I/System.out﹕ SecondActivity.onClick
10-20 18:07:18.419  24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent
10-20 18:07:18.419  24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :SecondEvent
10-20 18:07:18.419  24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: