EventBus3.0使用(二)

上一篇EventBus3.0使用(一)

Sticky Events 粘性事件

Sticky Events可以允许事件发布了,再注册订阅,订阅者才处理的特殊类型的事件。Android中就有这样的实例,也就是Sticky Broadcast,即粘性广播。正常情况下如果发送者发送了某个广播,而接收者在这个广播发送后才注册自己的Receiver,这时接收者便无法接收到刚才的广播,为此Android引入了StickyBroadcast,在广播发送结束后会保存刚刚发送的广播(Intent),这样当接收者注册完Receiver后就可以接收到刚才已经发布的广播。这就使得我们可以预先处理一些事件,让有消费者时再把这些事件投递给消费者。

一个很常见的例子

ActivityA跳转到ActivityB时传递用户User,按一般的做法,首先User必须实现序列化接口,然后User需放入Intent中,在ActivityB中又需要从Intent中解析出User。现在使用EventBus 的Sticky Events实现一下,以下是伪代码。

User 类

public class User { 
String name ; 
String phoneNum; 
// 其他字段省略
 public User(String aName) {  
     name = aName ; 
  } 
// 代码省略
 }

ActivityA

public class ActivityA extends Activity { 
// 某个点击事件
 @Override  public void onClick(View v) { 
 User aUser = new User("Mr.Simple");  
aUser.phoneNum = "123456";  // 其他数据 
 // 发布Sticky事件  
EventBus.getDefault().postSticky(aUser);  
// 跳转到ActivityB页面  
Intent intent = new Intent(this, ActivityB.class);  
startActivity(intent);
 }
}

ActivityB

public class ActivityB extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
// 以Sticky的形式注册  
EventBus.getDefault().registerSticky(this); 
} 
 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
private void receiveUser(User info){   
// 这里实现你的逻辑即可, info即为传递过来的User对象 
}
}

获取和手动删除粘性事件

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {   
 // "Consume" the sticky event    
EventBus.getDefault().removeStickyEvent(stickyEvent);    
// Now do something with it
}

下一篇EventBus3.0使用(三)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:EventBus出来已经有一段时间了,github上面也有很多开源项目中使用了EventBus。所以抽空学习...
    Kerry202阅读 1,308评论 1 2
  • 使用Android手机的时候,我们的手机管家中经常会出现开机自启动某某app,那么对于这个某某APP来说,他是怎么...
    徐爱卿阅读 6,053评论 8 14
  • 诸多无奈,最近在改一个项目的bug的时候,脑子老是一片空白,可能是最近脑子不够用,总之,好多东西忘了,阅读一些别人...
    狗子王1948阅读 7,778评论 6 53
  • 目录 一.概述 二.注册广播 三.发送广播 四.处理广播 五.广播的优先级 一、概述 广播(Broadcast)机...
    MryU93阅读 4,434评论 0 6
  • 一只手,能做什么? 每天都是紧紧地握着熟悉再也不能熟悉的笔, 只有偶尔,偶尔想起,现在的我,还是一个充满好奇,充满...
    小梓煜阅读 246评论 2 0