AndroidEventBus总结
什么是AndroidEventBus?
android事件总线,是一个发布 / 订阅的事件总线
github地址:https://github.com/greenrobot/EventBus
AndroidEventBus的作用?
AndroidEventBus是一个Android平台轻量级的事件总线框架, 它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。
Android中的Activity, Fragment, Service之间的交互是比较麻烦的,可能我们第一想到的是使用广播接收器来在它们之间进行交互。但使用广播接收器稍显麻烦,如果你要将一个实体类当做数据在组件之间传递,那么该实体类还得实现序列化接口,这个成本实在有点高
题外话:
序列化的弊端?
Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC
Parcelable不能能使用在要将数据存储在磁盘上的情况,并不是一个通用的序列化机制,当改变任何Parcel中数据的底层实现都可能导致之前的数据不可读取
在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
1、onEvent
2、onEventMainThread
3、onEventBackground
4、onEventAsync
onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEvnetBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
基本结构
EventBus的使用
Gradle:
compile 'org.greenrobot:eventbus:3.0.0'
Define events:
public class MessageEvent { /* Additional fields if needed */ }
Prepare subscribers
Register your subscriber (in your onCreate or in a constructor):
eventBus.register(this);
register(this)就是去当前类,遍历所有的方法,找到onEvent开头的然后进行存储。
Declare your subscribing method:
@Subscribe
public void onEvent(MessageEvent event) {/* Do something */};
Post events:
eventBus.post(event);
unregister
eventBus.unregister(this);
这是必须的步骤,很多开发者刚开始最容易遗忘的
【声明】
欢迎转载,但请保留文章原始出处