今天做项目时遇到了一个问题是同一个项目中两个不同的activity之间想要进行事件监听,也就是A_activity里面有了操作之后,另一个B_activity里面要马上做出改变。如果想要监听,就必须得到那个activity的对象,但显然这是没法做到的。

   首先想到了四大组件中的广播,通过发送广播sendBroadcast()就可以让两个毫无关系的activity产生监听联系。但是写好代码运行之后发现没有达到预想中的效果,分析后就发现不是代码写错了,而是发送普通的广播根本无法达到效果。因为,广播是在B_activity的oncreate()方法中注册的,也就是说只有进入了B界面的时候广播才能被注册,而这时候A界面的广播明显已经发送完成。sendBroadcast()也叫及时广播,也就是只有在发送广播时已经注册了的广播接受者才能收到广播。

   这时候想起听过但是没用过的sendStickyBroadcast()(不知道是否可以翻译为粘性广播?)。这个广播的特性就在于它会一直保留,不管是在发送前注册的还是发送后注册的接收者都可以收到广播。用法则和sendBroadcast()一样。试验过后发现果然可行。

   接着,又一个问题来了,运行发现每进入到B_activity都能收到该广播,但我只需要收到一次就可。于是在想,根据这种广播的特性,应该有提供消除广播的方法吧。在网上搜索之后发现果然有可以消除的方法,也就是:removeStickyBroadcast(intent),通过括号中的参数intent的action来区分要消除的是哪个广播。

   这样,在oncreate()或onStart()方法中注册广播接收者,在onStop()方法中取消注册广播接收者并移除之前发送的粘性广播即可达到想要的效果。