BroadCastReceiver是Android的四大组件之一,其作用于 接收系统或应用发出的各种广播。
广播即是消息,是由Android系统对外提供的一系列有关于系统及程序的提示信息,向所有的应用程序进行广播(发送),其发送根据其优先级列表进行顺序发送。
当然,我们自己也可以自我定义一个广播。
广播接收者( BroadcastReceiver )其是用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。
BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者通过 NotificationMananger 提醒用户,或者启动 Service 等等。
BroadCastReceiver机制
在Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播。而应用程序开发者也可以监听这些广播并做出程序逻辑的处理。广播是一种广泛运用的在应用程序之间传输信息的机制 。而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件.当一条广播被发送出来时,系统是在所有清单文件中遍历,找到能接收这条广播的广播接收者,如果广播接收者所在进程没有启动,那么系统会启动这个进程。
BroadCastReceiver使用场景
在现实生活当中:电台通过发送广播发布消息,买个收音机,就能收听
Android系统中:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。
Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁等等。
广播的分发类型:
无序广播 Normalbroadcasts:
无序广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到。
优点:消息传递的效率较高
缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播
有序广播 Ordered broadcasts:
系统会根据接收者声明的优先级(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000,正值越大,优先级越高。也可以调用IntentFilter对象的setPriority()进行设置)按顺序逐个执行接收者,前面的接收者有权终止广播(通过调用BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将处理结果存进广播Intent,然后传给下一个接收者。
优点:每个接收者可以选择 终止该广播,并且前面的接收者可以将处理结果存入广播中,传递下去。
缺点:消息传递的效率较低
广播的注册方式:
静态注册:就是在AndroidManifest.xml清单文件中进行定义,并且注册的广播接收器必须继承BroadcastReceiver类。
动态注册:就是在程序中使用Context.registerReceiver注册。
两种注册类型的区别:
静态注册:静态注册是当程序关闭后,如果有广播发过来,还能启动程序,类似于在系统后台保留一段程序。
优点:就是无需担心广播接收器是否是关闭状态,只要Android设备处于开启状态,广播接收器就能够接收到。
动态注册:动态注册的生命周期跟程序的生命周期是一样的,程序关闭后动态注册的广播是不能再接收到广播的。
优点:在Android的广播机制中,动态注册的优先级高于静态注册的优先级,因此在必要情况下,我们需要动态注册广播接收器。
广播的生命周期:
一共有3 步
转载请注明原文地址: https://ju.6miu.com/read-19832.html