EventBus的使用
来源:互联网 发布:淘宝达人账号简介范文 编辑:程序博客网 时间:2024/04/29 23:55
参考
EventBus—github
启舰— EventBus使用详解(一)——初步使用EventBus
启舰— EventBus使用详解(二)——EventBus使用进阶
Gadle
compile 'org.greenrobot:eventbus:3.0.0'
使用方法
涉及到三个地方
1. 新建一个消息类
2. 在你要接受消息的类里面,写一个onMessageEvent方法(新版本需要用注解),在这个方法内部去处理接受到的消息。还必须在生命周期方法里注册和注销EventBus
3. 在你要发消息的类里面,去发消息EventBus.getDefault().post(new MessageEvent(98));
Define events:
定义事件,新建一个类,一般这两个类里面会有几个属性,这个属性就是你要发送和传递的值
public static class MessageEvent { /* Additional fields if needed */ int age; public MessageEvent(int age){ this.age=age } public int getAge(){ return age; }}
Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode:
准备一个订阅者,声明一个方法(这个方法名可以随便起,因为他靠的是注解来识别方法),并用 @Subscribe注解这个方法,指定(可选)一个线程模式
在你要接受消息的Activity(Service)里添加下面的方法@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { /* Do something 拿到传递过来的数据 */ int age=evnt.getAge(); Log.e("tag",age+"");};
Register and unregister your subscriber. For example on Android, activities and fragments should usually register according to their life cycle:
在你要接受消息的Activity(Service)的生命周期方法中,注册和注销你的订阅者
@Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); }
Post events:
发送事件,在另一个类(Activity)里面发送消息
EventBus.getDefault().post(new MessageEvent(98));
注意
- 消息的接收是根据参数中的类名(MessageEvent)来决定执行哪一个的,多个方法中参数类名一样的话,那么这多个方法都会收到消息
线程(threadMode = ThreadMode.MAIN)
ThreadMode.MAIN
ThreadMode.ASYNC
ThreadMode.BACKGROUND
ThreadMode.POSTING
对照旧版本去理解
onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
- EventBus 《二》 Android EventBus的简单使用
- EventBus的使用初试
- EventBus的使用
- EventBus的使用
- EventBus的简单使用
- EventBus的使用
- eventbus的使用
- EventBus的初步使用:
- EventBus的使用
- EventBus的简单使用
- EventBus的使用总结
- EventBus的使用
- EventBus框架的使用
- EventBus的简单使用
- Eventbus的基本使用
- EventBus的使用
- EventBus的使用
- EventBus的简单使用
- 小扎曝Facebook北极数据中心图片_最先进数据中心都建在哪?
- 《Web接口开发与自动化测试基于Python语言》–第3章
- Cannot resolve symbol XXX 处理
- 来聊聊那些你想不到的环保黑科技?
- Android
- EventBus的使用
- 线程池,这一篇就够了!
- 小扎曝Facebook北极数据中心图片_最先进数据中心都建在哪?
- 树状数组 适用问题及参考代码
- 工厂模式
- Springboot bean注入 ---- Jedis注入
- nodemcu 8266修改DS18B20温度传感器分辨率
- 大数据分析实用工具
- js方法无效没有进入方法