首先分为俩者
1.广播(Broadcast)
定义:是一种广泛应用程序之前传递信息的机制
2.广播接收器(BoradcastReceiver)
定义:用来接收系统和应用的广播并对其进行响应的组件
广播的四种分类:
1.普通广播(完全异步执行的广播,发送一个广播,接收器都会接收到信息,且先后顺序不一致)
1.静态注册
当前broadcast Receiver 是否可以从当前应用外部获取Receiver message 。true,可以;false 不可以。如果为false ,当前broadcast Receiver 只能收到同一个应用或者拥有同一 user ID 应用发出广播。
2.动态注册
发送广播:
注意事项:
1.BoradcastReceiver生命周期只有10几秒左右的生命周期,所以不要做耗时操作,应该交给服务去操作,在广播中不要开启子线程因为其生命周期太短会连带子线程一起销毁
2.每次接收到广播的时候都会重新创建新的接收器对象
3.动态注册的广播的生命周期依赖调用它的activity或service;
静态注册的广播是常驻型的,即使应用程序退出了,仍然可以接收。
内存不足时,当BroadcastReceiver执行完了onReceive方法后,是会被回收的。
2.有序广播(同步执行的广播,同一时刻只会有一个广播接收器接收)
根据android:priority的数值大小来进行排序。
如果在AnotherReceiver的onReceive()方法中调用了abortBroadcast()方法,表示将这条广播截断,后面的广播接收器将无法再接收到这条广播
3.本地广播
之前俩个都是系统全局广播,即发出可以被其他应用接收到,同时也可以接收到其他应用的广播,实现本地广播的发送和接收也很简单,主要使用了一个LocalBroadcastManager来对广播进行管理,并提供了相应的发送广播和注册广播接收器的方法。
首先通过LocalBroadcastManager.getInstance(this)方法获取一个LocalBroadcastManager实例,然后用LocalBroadcastManager提供的registerReceiver()和unregisterReceiver()方法来动态注册和取消接收器以及sendBroadcast()方法发送本地广播
注意一点,本地广播是无法通过静态注册的方式来接收的,因为静态注册主要就是为了让程序在未启动的情况下也能收到广播,而发送本地广播时,应用程序肯定已经启动了,也完全不需要使用静态注册的功能
4.粘性广播
通过Context.sendStickyBroadcast()方法可发送粘性(sticky)广播,这种广播会一直滞留,当有匹配该广播的接收器被注册后,该接收器就会收到此条广播。注意,发送粘性广播还需要BROADCAST_STICKY权限:
endStickyBroadcast()只保留最后一条广播,并且一直保留下去,这样即使已经有广播接收器处理了该广播,一旦又有匹配的广播接收器被注册,该粘性广播仍会被接收。如果只想处理一遍该广播,可通过removeStickyBroadcast()方法来实现。接收粘性广播的过程和普通广播是一样的