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注册和销毁,以及填写接收消息的订阅方法,并且注意发送消息和接收消息所在的线程是否正确。
相关文章推荐
- EventBus的使用详解,功能为在Fragment,Activity,Service,线程之间传递消息
- Android消息传递之EventBus 3.0使用详解(转载)
- Android消息传递之EventBus 3.0使用详解
- Android:EventBus的使用 从此消息传递变得简单
- Android消息传递之EventBus 3.0使用详解
- (转)Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解(三)
- 使用Bandle 实现 Android Activity间消息的传递
- Android消息传递之EventBus 3.0使用详解
- Android消息传递之EventBus 3.0使用详解
- Android 消息分发使用EventBus的实例详解
- 【android】消息传递利器EventBus的使用
- Android消息传递之EventBus 3.0使用详解
- 详解使用Eclipse开发Android源码
- Android学习札记34:看到的一种对Activity间使用Parcel传递数据的解释
- Android入门篇二:使用意图在Activity之间传递数据
- 利用Bundle实现Android Activity间消息的传递
- Android 使用Intent实现Activity跳转和数据传递
- android的消息Toast,提示对话框,menu,Activity替换数据传递。
- android: activity之间传递复杂数据类型[使用Serializable序列化或者Parcelable序列化]