最新看到有提到EventBus,听说使用该方法,好处多多,jar包很小,就试着学习。

http://blog.csdn.net/richie0006/article/details/47072283

参考文章写的很详细了,总结如下


基本使用

(1)自定义一个类,可以是空类,比如:

publicclassAnyEventType{
  1. publicAnyEventType(){}
  2. }

(2)在要接收消息的页面注册:

eventBus.register(this);

(3)发送消息

eventBus.post(newAnyEventTypeevent);

(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):

publicvoidonEvent(AnyEventTypeevent){} (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.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






更多相关文章

  1. Android(安卓)短信模块分析(三) MMS入口分析
  2. Android中AsyncTask的源码分析以及实例
  3. Thread、Handler和HandlerThread关系何在?
  4. Android(安卓)init进程——解析配置文件
  5. Android中Handler原理
  6. Android学习笔记--service部分
  7. Android(安卓)更新UI的两种方法——handler和runOnUiThread()
  8. android Toast大全(五种情形)
  9. Android(安卓)SubsamplingScaleImageView(subsampling-scale-ima

随机推荐

  1. C#中关于List<T>的并集与交集以及差集解
  2. C#中发送邮件的实现方法详解
  3. C# 数组作为参数传递出现的问题解决
  4. C#中引用类型之特例string的详细介绍
  5. C#实现Json序列化删除null值的方法实例
  6. c#如何生成二维码的示例分享
  7. C#如何通过对象属性名修改值的实例
  8. C#中Builder生成器模式解决配置电脑的问
  9. c#接口的问题的解决办法详解
  10. Asp.net Mvc表单验证气泡提示效果展示