EventBus2和EventBus3的使用和原理介绍

本文介绍了EventBus从2到3版本的使用方法和原理,包括线程模式设置、粘性事件及优先级。详细阐述了EventBus的订阅、发送消息和跨线程通信机制,强调了EventBus3中使用APT生成索引文件以提高性能。
摘要由CSDN通过智能技术生成

EventBus已经发展到第三版了,对于它的使用和原理相对于之前也有了很大的改进。下面就介绍一下EventBus2和EventBus3的使用和原理
说明:方法上面的参数设置
threadMode:线程工作状态,表示方法在哪个线程执行
ThreadMode.POSTING:默认的设置,表示发送消息在哪个线程,就在哪个线程执行方法
ThreadMode.MAIN:主线程执行该方法
ThreadMode.MAIN_ORDERED:也是在主线程执行,只是不会阻塞主线程
ThreadMode.BACKGROUND:后台线程执行
ThreadMode.ASYNC:异步子线程

sticky:是否是粘性操作,表示如果方法在后面注册的话,也是可以收到消息的
priority:优先级,同一个消息,优先级高的优先收到消息

1、使用

1.1 EventBus2

1.1.1 EventBus2的配置

在app的build.gradle中进行配置

implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
1.1.2 EventBus2的使用

注册:
需要在类中注册当前的对象,对象销毁的时候取消注册

public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);//注册

    }

    @Override
    protected void onDestroy() {
   
        super.onDestroy();
        EventBus.getDefault().unregister(this);//取消注册
    }

	//定义事件
    @Subscribe(threadMode = ThreadMode.BACKGROUND,priority = 4)
    public void onEvent(int click){
   
        Log.e("MainActivity","onEvent"+click);
    }
}

发送事件:

EventBus.getDefault().post(3);
EventBus.getDefault().postSticky(new Eventtype(3));//发送粘性事件

发送完事件之后就可以在Logcat中发现方法onEvent中打印的Log了。

1.2 EventBus3

1.2.1 EventBus3的配置

(1)导包

implementation 'org.greenrobot:eventbus:3.1.1'
    annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'

(2)配置索引文件属性,在build.gradle中进行配置

  defaultConfig {
   
      javaCompileOptions{
   
            annotationProcessorOptions{
   
                includeCompileClasspath = true
                arguments = [
                        "eventBusIndex": "com.example.viewtest.EventBusIndex"]
            }
        }
        }

(3)定义方法
在类中定义方法

@Subscribe(threadMode = ThreadMode.BACKGROUND,priority = 4)
    public void onEvent(int click){
   
        Log.e("MainActivity","onEvent"+click);
    }

(4)编译
调用app的make project,就会生成对应的索引文件
在这里插入图片描述
(5)在application中进行注册

EventBus.builder().addIndex(new EventBusIndex()).installDefaultEventBus();
1.2.2 EventBus3的使用

基本操作都是一样的,也是需要注册和注销注册,发送事件

public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);

        findViewById(R.id.tv_click).setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                EventBus.getDefault().post(new Eventtype(3));//发送消息
            }
        });

    }

    @Override
    protected void onDestroy() {
   
        super.onDestroy();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值