EventBus3.0的用法详解

1、导入组件

compile 'org.greenrobot:eventbus:3.0.0'

2、建立索引(建立索引速度会更快),不建立索引可以跳过第二步骤

1)在工程的gradle文件的dependencies中添加

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8  

2)在App的gradle文件中添加

apply plugin: 'com.neenbedankt.android-apt'
apt {
    arguments {
        //build会在包名下生成一个EventBusIndex类,在类中可以直接使用
        eventBusIndex "com.yelong.androidframeproject.EventBusIndex"
    }
}

3)在App的gradle文件的dependencies中添加

apt 'org.greenrobot:eventbus-annotation-processor:3.0.1'

4)编译项目,在/ProjectName/app/build/generated/source/apt/PackageName里面看到索引类

3、初始化EventBus
EventBus默认有一个单例,可以通过getDefault()获取,也可以通过EventBus.builder()构造自定义的EventBus,比如要应用我们生成好的索引时:
EventBus mEventBus = EventBus.builder().addIndex(new EventBusIndex()).build();
如果想把自定义的设置应用到EventBus默认的单例中,则可以用installDefaultEventBus()方法:
EventBus.builder().addIndex(new EventBusIndex()).installDefaultEventBus();

4、定义事件,新建一个类MessageEvent里面有个实例域message

5、在需要接受事件的Activity或者Fragment中注册和反注册,然后编写对应的接受事件

@Subscribe(threadMode = ThreadMode.POSTING)
    public void onPostEvent(MessageEvent event) {
        System.out.println("onPostEvent == " + event.getMessage());
        //tvMessage.setText(event.getMessage());
        //默认方式,在发送线程中执行,即post事件在主线程中发送就到主线程中执行
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMainEvent(MessageEvent event) {
        System.out.println("onMainEvent == " + event.getMessage());
        tvMessage.setText(event.getMessage());
        //在UI主线程中执行
    }

    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void onBackEvent(MessageEvent event) {
        System.out.println("onBackEvent == " + event.getMessage());
        //在后台线程中执行
    }

    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onAsyncEvent(MessageEvent event) {
        System.out.println("onAsyncEvent == " + event.getMessage());
        //强制在后台线程中执行
    }

6、发送事件。可以在任何地方发送事件,不管时UI主线程还是子线程

EventBus.getDefault().post(new MessageEvent("你在干嘛呢"));
EventBus.getDefault().postSticky(new MessageEvent("你在干嘛呢"));

什么时候使用sticy,当你希望你的事件不被马上处理的时候,举个栗子,比如说,在一个详情页点赞之后,产生一个VoteEvent,VoteEvent并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。值越小优先级越低

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true,priority = 1)

说明:EventBus是跨线程通信,不能跨进程通信。
参考资料链接:
https://github.com/greenrobot/EventBus
https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651231761&idx=1&sn=3d43eb2a21556f820f12ee6f5fd87175&scene=1&srcid=0428oPNieSjz4Yzj13IISPSS&key=b28b03434249256b7ea15736404f037ec528b3028bab1dcf5657be35528009630d7179d8b70075085c4f6897ae51fb11&ascene=0&uin=NTkyMjI3NQ%3D%3D&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.11.4+build(15E65)&version=11020201&pass_ticket=vfoQOJrCt3c0l2XN46zh5U1pJAJ4MuppOBXN915b2Ew%3D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值