zoukankan      html  css  js  c++  java
  • 个人作业——技术博客(EventBus的使用说明)


    一、EventBus 介绍

    EventBus 利用发布-订阅者模式进行解耦,简化各组件之间通信的复杂度。并且 EventBus 易于入门,API 简单,作为目前的主流开发框架,配合 Kotlin+MVVM+Retrofit,可以搭建起商业级的应用架构。


    二、如何使用

    步骤 ①:导包

    implementation 'org.greenrobot:eventbus:3.0.0'
    

    步骤 ②:定义事件

    class LikeEvent:MessageEvent() {
        /**
         * item对应id
         * */
        lateinit var id:String
    }
    

    步骤③:注册和解除

     @Override
     public void onStart() {
         super.onStart();
         EventBus.getDefault().register(this);
     }
    
     @Override
     public void onStop() {
         super.onStop();
         EventBus.getDefault().unregister(this);
     }
    

    步骤 ④:订阅者

    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onMessageEvent(messageEvent: MessageEvent) {
        when(messageEvent){
            is LikeEvent -> {
              //
            }
        }
    }
    

    步骤 ⑤:发送事件

    helper.getView<CheckBox>(R.id.iv_like).setOnClickListener {
        val event = LikeEvent()
        event.id = item.id
        EventBus.getDefault().post(event)
    }
    

    注意点

    订阅者对应的方法必须是 public,返回值为空,并且只有一个参数,否则将接收不到事件。


    三、代码说明

    image

    Event:一般是实体类,用于事件信息的传送。


    Subscriber:事件的接收者,接收事件的方法必须为public,同时用@Subscriber注解说明。

    在注解当中可以指定事件订阅者所处的线程:

    ①POSTING:事件的订阅者与事件的发送者处于同一线程。这是默认的线程设置。

    ②MAIN:事件的订阅者将在MAIN线程中执行,如果事件的发布者在MAIN线程,发布者的进程将被阻塞。

    ③BACKGROUND:如果事件是从MAIN线程发布出来的,事件的订阅者接收到事件后,将在新的子线程当中执行。如果事件是从子线程发布出来,事件的订阅者接收到事件后,将在该子线程当中执行,注意:此时,执行的方法当中不能涉及到UI操作。

    ④ASYNC:事件的接收者接收到事件后,将在新的子线程当中执行方法,注意:方法当中不能涉及到UI操作。


    Publisher:事件的发送者,使用EventBus.getDefault()方法获取到EventBus对象,再调用post()方法将事件对象发送出去。

    四、总结

    EventBus的使用非常的简单,其难点主要是配合其他主流框架的使用,构建更简洁的代码。

    五、参考文献

    EventBus
    概述:这是EventBus的官方文档。

  • 相关阅读:
    C# 操作DataTable
    SQLSERVER 连接常见问题
    python 3 与python 2连接mongoDB的区别
    图片url 设置大小
    Python在VSCode环境抓取TuShare数据存入MongoDB环境搭建
    excel解决日常问题记录
    安装MAT内存分析工具独立版
    类加载机制介绍
    jvm启动语句
    linux监控系统语句
  • 原文地址:https://www.cnblogs.com/aahorse/p/13124717.html
Copyright © 2011-2022 走看看