Android第三方开源框架——EventBus

2019-01-17  本文已影响0人  WangSins

EventBus是Android时间总线,主要用于各组件之间的通信,降低各组件之间通行的通信的复杂程度。

三个基本概念

定义事件

class MessageEvent {
        var message:String? = null
    }

注册与注销

一般在onCreate()中注册,

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    EventBus.getDefault().register(this)
}

在onDestroy()中注销。

override fun onDestroy() {
    ...
    EventBus.getDefault().unregister(this)
}

事件响应方法

EventBus实现简单的现成切换,包括后台线程、UI线程、异步线程.

//调用post方法的线程是主线程
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMain(event: Event?) {
    ...
    ...
}
// //默认调用方式,在调用post方法的线程执行,避免了线程切换,性能开销最少  
@Subscribe(threadMode = ThreadMode.POSTING)
fun onEventPosting(event: Event?) {
    ...
    ...
}
// 如果调用post方法的线程不是主线程,则直接在该线程执行
// 如果是主线程,则切换到后台单例线程,多个方法公用同个后台线程,按顺序执行,避免耗时操作
@Subscribe(threadMode = ThreadMode.BACKGROUND)
fun onEventBackgroud(event: Event?) {
    ...
    ...
}
//开辟新独立线程,用来执行耗时操作,例如网络访问
//EventBus内部使用了线程池,但是要尽量避免大量长时间运行的异步线程,限制并发线程数量
//可以通过EventBusBuilder修改,默认使用Executors.newCachedThreadPool()
@Subscribe(threadMode = ThreadMode.ASYNC)
fun onEventAsync(event: Event?) {
    ...
    ...
}

发送事件

EventBus.getDefault().post(MessageEvent("Hello EventBus!"));
上一篇下一篇

猜你喜欢

热点阅读