Android EventBus学习
2015-10-20 17:55
387 查看
最新看到有提到EventBus,听说使用该方法,好处多多,jar包很小,就试着学习。
http://blog.csdn.net/richie0006/article/details/47072283
参考文章写的很详细了,总结如下
基本使用
(1)自定义一个类,可以是空类,比如:
public class AnyEventType {
public AnyEventType(){}
}
(2)在要接收消息的页面注册:
eventBus.register(this);
(3)发送消息
eventBus.post(new AnyEventType event);
(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
public void onEvent(AnyEventType event) {}
(5)解除注册
eventBus.unregister(this);
事件接收函数有四个,区别如下:
onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
在文章中介绍到,发送的事件不同,需要设置参数类型不同的接收函数,我回到源码看了下,发现源码的事件发送函数为:
http://blog.csdn.net/richie0006/article/details/47072283
参考文章写的很详细了,总结如下
基本使用
(1)自定义一个类,可以是空类,比如:
public class AnyEventType {
public AnyEventType(){}
}
(2)在要接收消息的页面注册:
eventBus.register(this);
(3)发送消息
eventBus.post(new AnyEventType event);
(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
public void onEvent(AnyEventType event) {}
(5)解除注册
eventBus.unregister(this);
事件接收函数有四个,区别如下:
onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
在文章中介绍到,发送的事件不同,需要设置参数类型不同的接收函数,我回到源码看了下,发现源码的事件发送函数为:
public void post(Object event)我想既然事件发送函数类型可以为Object,为什么接收函数不可以设置同样的参数呢?所以稍微改了一下OnEvent的接收函数,发现确实可行。
具体代码如下:
public void onEvent(Object event){ String msg = "onEvent 我们收到了消息:"; System.out.println("FirstActivity.onEvent"); System.out.println("FirstActivity.onEvent :" + event.getClass().getSimpleName()); switch (event.getClass().getSimpleName()){ case "FirstEvent": msg += ((FirstEvent)event).getMsg(); break; case "SecondEvent": msg += ((SecondEvent)event).getMsg(); break; default: break; } Log.d("EventBus", msg); }
实验基于原博文,所以其他代码及布局文件不再详述,在第二个Activity中发送不同Event类型事件,接收后打印如下:
10-20 18:07:14.789 24869-24869/com.example.hornsey.myapplication I/System.out﹕ SecondActivity.onClick 10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent 10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :FirstEvent 10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick 10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ SecondActivity.onClick 10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent 10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :SecondEvent 10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick
相关文章推荐
- Android开发_如何调用系统默认浏览器访问
- Android View 触屏事件传递
- Android 电话拨号器
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
- android 深入理解Android中的自定义属性
- Android 常见命令操作(需要配置adb.exe的环境变量)
- android显示证书sha1
- Android 退出应用程序
- android studio 导入jar包和删除jar包解决
- Service的使用
- Android 手把手教您自定义ViewGroup(一)
- android项目实战课程扣丁音乐已杀青预计本月上线
- Android 体系结构
- Android总结篇系列:Android Service
- android Pernission的所有权限说明
- Android自定义动画之实现3D翻转的动画
- 客户端浏览器判断(ios .android)
- Android RecyclerView的使用过程遇到的问题
- android截屏代码