发送/接收临时广播
页面与页面之间传递和传回消息可使用Intent。页面向适配器传递消息可使用适配器的构造函数;适配 器向页面传回消息有点麻烦。碎片如何把消息传回页面呢?这个问 题看起来很高深,其实至少有两种解决办法。
(1)Fragment提供了onAttach方法,onAttach方法指定了结合的 Activity对象。同样定义一个回调接口,把Activity对象强制转换为回调接口就可以在碎片中调用页面方法。这种方式不是本节的重点,有兴趣的读者可以自行钻研。
(2)人人都想成为武林高手,捷径之一就是寻找武功秘笈。同样是武术教材,清风剑法练十年还不如九阴真经练一年。Android隐藏着不少武林大法,每当你按照常规思路难以解决问题时,往往用一个大法就可 以迎刃而解。“5.2 列表类视图”在处理ListView与GridView的分隔线时 便用到了padding大法。**现在适配器向页面传回消息有一个Broadcast大法,**无论对方在何处,只要用Broadcast大法吼一吼,对方立刻能够听到,岂不妙哉。
广播(Broadcast)用于Android组件之间的灵活通信,与Activity的区别在于:
(1)Activity只能一对一通信;Broadcast可以一对多,一人发送广 播,多人接收处理。
(2)对于发送者来说,广播不需要考虑接收者有没有在工作,接收者在工作就接收广播,不在工作就丢弃广播。
(3)对于接收者来说,会收到各式各样的广播,所以接收者要自行过滤符合条件的广播,才能进行解包处理。
与广播有关的方法主要有以下3个。
- sendBroadcast:发送广播。
- registerReceiver:注册接收器,一般在onStart或onResume方法中注册。
- unregisterReceiver:注销接收器,一般在onStop或onPause方法中注销。
如果广播是在应用内使用,不需要跨进程,建议使用LocalBroadcastManager下的registerReceiver与 unregisterReceiver方法,因为这样不但更有效率(不需要跨进程通信),而且不用考虑广播开放造成的安全 问题(如果其他应用也能收到广播)。