浅析Android Broadcast(广播)

一,什么是广播?

广播, 做为Android的四大组件之一,被用于发送和接收,来自系统或其它app的消息。其设计原理,是基于观察者模式来设计的,即先订阅,后接收。广播消息,并不受限于某一个单一进程。因此,它可以用于跨进程间的通信,在多个App之间传递消息。

二,广播的分类。

根据广播的订阅(定义)方式和生命周期,我们可以将广播归纳为2种类型,即静态广播与动态广播。

  • 静态广播
    静态注册的广播,在App被安装后,就自动被系统的PackageManager注册保存起来。这样,哪怕你的app,没有在运行,你的app也可以接收到广播。订阅这样一个广播,我们需要分2步实现。第1步,是创建一个类,继承自BroadcastReceiver。第2步,是在配置清单文件(AndroidManifest.xml)里面,进行配置第1步所创建的类。
  1. 创建继承自BroadcastReceiver的类,代码如下:
class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
           // 当接收到广播时,这个方法会被调用,intent参数,包含了广播所附带的数据。
    }
}
  1. 在AndroidManifest.xml里面,配置刚刚定义的类。这个<receiver></receiver>标签,必须放在<application></application>标签中间,与<activity/>标签同层级。
<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

  • 动态广播
    动态广播,是指通过代码,来动态订阅。每一个动态广播,都绑定一个上下文Context,要么是某个Activity的,要么是Application的。它的特点是,生命周期只局限于某个页面的生命周期,亦或是App的生命周期。当绑定广播的Activity或App被销毁后,就无法再接收广播。同样地,订阅这样一个广播,我们需要分2步走。第1步,是创建一个类,继承自BroadcastReceiver,熟悉的配方,一样的方式。第2步,创建该类的实例。
  1. 创建继承自BroadcastReceiver的类,代码如下:
class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
           // 当接收到广播时,这个方法会被调用,intent参数,包含了广播所附带的数据。
    }
}
  1. 创建BroadcastReceiver子类的实例,代码如下:
val br: BroadcastReceiver = MyBroadcastReceiver()
  1. 创建IntentFilter,添加订阅事件,并注册广播。
val filter = IntentFilter()
// 添加要订阅的广播事件
filter.addAction(Intent.ACTION_SCREEN_OFF)
// 注册广播
registerReceiver(br, filter)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容