您的位置:首页 > 编程语言 > Java开发

Android中EventBus使用详解之Activity与Activity间消息传递(eclipse版)

2016-09-08 14:47 274 查看

一、基础

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、线程之间传递消息。优点是开销小,代码更优雅,以及将发送者和接收者解耦。

二、进阶

EventBus有4种订阅函数,这四种订阅函数都是使用onEvent开头的,它们的功能稍有不同:告知观察者事件发生时通过EventBus.post函数实现,这个过程叫做事件的发布,观察者被告知事件发生叫做事件的接收,是通过下面的订阅函数实现的

1、onEvent:

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

2、onEventMainThread:

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

3、onEventBackground:

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

4、onEventAsync:

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

三、Activity与Activity间消息传递详解

1、首先,需要先到github下载greenrobot作者的EventBus的jar包,EventBus自3.0起改用Android Studio,但2.0以上版本仍然可以使用,直接下载2.0以上版本即可。并添加到libs目录下,注意android SDK版本过低的需要添加eclipse构建目录。

2、在使用EventBus之前需要事先把实体类准备好,比如:UserEntity、GoodsEntitiy等,就是存放一堆属性、一堆set/get方法等的实体类。

3、然后就可以使用EventBus了,第一步需要在2个Activity中的onCreate和onDestory等成对生命周期方法中都分别注册和销毁EventBus。

4、第二步需要在其中一个Activity中使用post方法发送消息,其参数就是创建好的实体类。

5、第三步需要在2个Activity中都添加EventBus的4种订阅函数其中之一,按需添加,但比如在第二个Activity中用post方法发送消息,则就在第一个Activity中的订阅函数中接收消息。到此就是EventBus中Activity和Activity之间的基础使用方法,十分简单便捷。

四、注意事项

1、在注册和销毁EventBus中所用的是当前Activity的对象。

2、在2个Activity中都需要进行EventBus注册和销毁,以及填写接收消息的订阅方法,并且注意发送消息和接收消息所在的线程是否正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息