Android(安卓)EventBus学习
16lz
2021-01-26
最新看到有提到EventBus,听说使用该方法,好处多多,jar包很小,就试着学习。
http://blog.csdn.net/richie0006/article/details/47072283
参考文章写的很详细了,总结如下
(1)自定义一个类,可以是空类,比如:
publicclassAnyEventType{- publicAnyEventType(){}
- }
(2)在要接收消息的页面注册:
eventBus.register(this);(3)发送消息
eventBus.post(newAnyEventTypeevent);(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
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.onClick10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :FirstEvent10-20 18:07:14.799 24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ SecondActivity.onClick10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication I/System.out﹕ FirstActivity.onEvent :SecondEvent10-20 18:07:18.419 24869-24869/com.example.hornsey.myapplication D/EventBus﹕ onEvent 我们收到了消息:SecondActivity.onClick
更多相关文章
- Android(安卓)短信模块分析(三) MMS入口分析
- Android中AsyncTask的源码分析以及实例
- Thread、Handler和HandlerThread关系何在?
- Android(安卓)init进程——解析配置文件
- Android中Handler原理
- Android学习笔记--service部分
- Android(安卓)更新UI的两种方法——handler和runOnUiThread()
- android Toast大全(五种情形)
- Android(安卓)SubsamplingScaleImageView(subsampling-scale-ima