Evenbus 3.0使用指南

Enventbus的作用和好处我就不多说了,这里介绍下怎么使用。

2.+版本的使用方法

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. public void onEvent(MessageEvent event) {  
  2.     log(event.message);  
  3. }  

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. public void onEventMainThread(MessageEvent event) {  
  2.     textField.setText(event.message);  
  3. }  

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. public void onEventBackgroundThread(MessageEvent event){  
  2.    saveToDisk(event.message);  
  3. }  

3.0以后的写法

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行  
  2. public void onUserEvent(UserEvent event) {  
  3. }  

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Subscribe(threadMode = ThreadMode.BackgroundThread) //在后台线程执行  
  2. public void onUserEvent(UserEvent event) {  
  3. }  

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Subscribe(threadMode = ThreadMode.Async) //强制在后台执行  
  2. public void onUserEvent(UserEvent event) {  
  3. }  


[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Subscribe(threadMode = ThreadMode.PostThread) //默认方式, 在发送线程执行  
  2. public void onUserEvent(UserEvent event) {  
  3. }  

相对之前,大量用到了注解,对于注解的介绍,请查看下面的文章http://blog.csdn.net/xiangzhihong8/article/details/52850214

EnventBus的简单使用

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.    super.onCreate(savedInstanceState);  
  4.    setContentView(R.layout.activity_main);  
  5.    EventBus.getDefault().register(this); //第1步: 注册  
  6. }  
  7. @Override  
  8. protected void onDestroy() {  
  9.    super.onDestroy();  
  10.    EventBus.getDefault().unregister(this);//反注册  
  11. }  
  12.   
  13.   
  14. @Subscribe(threadMode = ThreadMode.BackgroundThread) //第2步:注册一个在后台线程执行的方法,用于接收事件  
  15. public void onUserEvent(ClassEvent event) {//参数必须是ClassEvent类型, 否则不会调用此方法  
  16. }  
  17.   
  18.   
  19. //在任意地方,调用发送事件  
  20. EventBus.getDefault().post(new ClassEvent());//第3步: 发送事件,当然参数是Object,所以可以发送任何对象  
  21.   
  22.   
  23. //在任意地方,注册事件类  
  24. public static class ClassEvent{  
  25. } //定义一个事件, 可以不包含成员变量,和成员方法  
  26.   
  27. //当然你也可以定义包含成员变量的事件, 用来传递参数  
  28. public class MsgEvent {  
  29.    public String jsonData;  
  30.    public MsgEvent(String jsonData) {  
  31.        this.jsonData = jsonData;  
  32.    }  
  33. }  

Sticky事件的使用 

如果你使用postSticky发送事件, 那么可以不需要先注册, 也能接受到事件。

首先,你可能需要声明一个方法:

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. @Subscribe(threadMode = ThreadMode.MainThread, sticky = true)  
  2. public void onEvent(MsgEvent event){  
  3. }  

注意这里的sticky必须设置为true。

然后就可以发送事件了。

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. EventBus.getDefault().postSticky(new MsgEvent("With Sticky"));  

然后再需要接受的地方就可以接受发送的事件了


对于EventBus这里有几个参数需要重点说明下

[html] view plain copy  print?Evenbus 3.0使用指南Evenbus 3.0使用指南
  1. /**  
  2.  * threadMode 表示方法在什么线程执行   (Android更新UI只能在主线程, 所以如果需要操作UI, 需要设置ThreadMode.MainThread)  
  3.  * sticky     表示是否是一个粘性事件   (如果你使用postSticky发送一个事件,那么需要设置为true才能接受到事件)  
  4.  * priority   优先级                 (如果有多个对象同时订阅了相同的事件, 那么优先级越高,会优先被调用.)  
  5.  * */  
  6. @Subscribe(threadMode = ThreadMode.MainThread, sticky = truepriority = 100)  
  7. public void onEvent(MsgEvent event){  
  8. }  
上一篇:大数据下的空气监测如何改变你的生活方式?


下一篇:MySQL初步使用