美文网首页
Android第三方开源框架——EventBus

Android第三方开源框架——EventBus

作者: WangSins | 来源:发表于2019-01-17 20:45 被阅读0次

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

    三个基本概念

    • Event(事件):他其实是一个对象,但是我们可以理解为消息,然而事件又分为一般事件和粘性事件(Sticky);粘性事件类似于粘性广播,在事件发出后,如果有Subscriber(订阅者)订阅,依然能收到订阅消息。
    • Publisher(发布者):发布的是某事件的对象,通过post接口发布事件。
    • Subscriber(订阅者):订阅的是某种事件类型的对象。当发布者发布事件后,EventBus执行Subscriber(订阅者)的事件响应函数onEvent()对事件进行处理。

    定义事件

    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!"));
    

    相关文章

      网友评论

          本文标题:Android第三方开源框架——EventBus

          本文链接:https://www.haomeiwen.com/subject/qmrwdqtx.html