EventBus3.0的用法详解
2016-04-29 14:59
441 查看
1、导入组件
2、建立索引(建立索引速度会更快),不建立索引可以跳过第二步骤
1)在工程的gradle文件的dependencies中添加
2)在App的gradle文件中添加
3)在App的gradle文件的dependencies中添加
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中注册和反注册,然后编写对应的接受事件
6、发送事件。可以在任何地方发送事件,不管时UI主线程还是子线程
什么时候使用sticy,当你希望你的事件不被马上处理的时候,举个栗子,比如说,在一个详情页点赞之后,产生一个VoteEvent,VoteEvent并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。值越小优先级越低
说明: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
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
相关文章推荐
- log4j配置(转载的)
- vim 常用命令
- JavaScript基础学习(八)—事件
- 流程图
- JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈
- 有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。
- JavaScript ---- 城市联动
- 关于iscsi
- ubuntu server partation config example
- mysql的学习笔记
- 给自己看看
- Go - 以任意类型的slices作为输入参数
- Android Studio 使用小技巧和快捷键
- iOS开发发布企业版和内测版应用到蒲公英
- 关于line-height
- .net资源链接
- Arraylist Vector Linkedlist区别和用法 (转)
- Hbase单机版安装
- 使用Java7的Files工具类和Path接口来访问文件
- request.getRemoteAddr()问题及解决办法 X-FORWARDED-FOR