第4期:广播与广播接收者

2019-02-12  本文已影响1人  大智先生

Android的广播有哪几种类型?各有什么特点?

1、系统广播(System Broadcast):Android系统内置的广播,用于对外广播系统基本状态的变化。比如开机广播、锁屏广播、网络状态变化广播、电量变化广播、应用安装与卸载广播等。系统广播,用户只能接收,无法发送。

2、普通广播(Normal Broadcast):也称无序广播,是用户自行发送和接收的一种广播,可通过定义Intent-Filter指定广播的actiondata。发送广播时使用sendBroadcast()

3、有序广播(Ordered Broadcast):也是用户自定义发送和接收的一种广播,区别在于广播发出后,广播接收者按照优先级(priority)从高到低依次接收,并且优先级高的接收到广播后,可以对广播进行拦截和修改。如果两个广播接收者优先级相同,则动态注册的广播优先级要高于静态注册的广播接收者。发送广播时使用sendOrderedBroadcast()

4、粘性广播(Sticky Broadcast):与普通广播不同的是,粘性广播发送后,信息就一直保存在系统的容器内,需要时可直接通过IntentFilter匹配指定的Action获取,无需广播接收者。比如电池电量的广播就是粘性广播。发送粘性广播使用sendStickyBroadcast()
注:粘性广播因安全问题,从Android 5.0(API 21)起被弃用。

5、本地广播(Local Broadcast):Android的广播属于全局广播,可以跨APP通信,只要条件符合,当前APP发出的广播可以被其它APP接收到,也可以接收到其它APP发出的广播。因此存在一定的安全性问题和效率问题。当不存在跨APP通信的需求时,推荐使用Android的本地广播。本地广播有以下几个特性:
1) 本地广播仅限APP内发送和接收,更安全高效;
2) 本地广播接收者只能动态注册,不能静态注册。

2. 广播有哪两种注册方式?二者有什么区别?

注册广播有两种方式,一种是在代码中进行动态注册;一种是在清单文件在进行静态注册。

1、动态注册:只有在应用启动后才能接收广播,应该未启动或已关闭则不能接收到广播。这种方式比较节省资源,推荐。

2、静态注册:无论应用处于何种状态,均可以接收到广播。这种方式比较耗费资源,除非有需求,否则不推荐这种方式。

也因此,Android中有些广播是不支持静态注册的,比如锁定屏幕和解锁屏幕的广播,电量变化的广播,时间变化的广播,配置变化的广播。

  1. android.intent.action.SCREEN_ON
  2. android.intent.action.SCREEN_OFF
  3. android.intent.action.BATTERY_CHANGED
  4. android.intent.action.CONFIGURATION_CHANGED
  5. android.intent.action.TIME_TICK

3. 不同方式注册的广播,onReceiver()方法里的Context参数相同吗?

不相同。

  1. 静态注册的广播,返回的是ReceiverRestrictedContext
  2. 动态注册的广播返回的是注册时的Context,比如Activity。
  3. 本地广播返回的是ApplicationContext

参考资料

Android广播类型汇总 - Carson_Ho

上一篇 下一篇

猜你喜欢

热点阅读