美文网首页
浅析Android Broadcast(广播)

浅析Android Broadcast(广播)

作者: 李岳锋 | 来源:发表于2020-04-16 18:58 被阅读0次

    一,什么是广播?

    广播, 做为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)
    

    相关文章

      网友评论

          本文标题:浅析Android Broadcast(广播)

          本文链接:https://www.haomeiwen.com/subject/fzydvhtx.html