Android BroadcastReceiver 广播的两种注册方式

广播(BroadcastReceiver)作为android四大组件之一,也是我们经常使用的主流功能,他主要是用来接收系统的广播消息和来自其他应用发来的广播消息
广播分为两种 普通广播和有序广播
普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。
有序广播是通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行
今天的笔记是说下广播的两种注册方式和使用方法

以开机广播为例
首先我们要写一个自定义的广播继承BroadcastReceiver()

class BootCompleteReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
           if(Intent.ACTION_BOOT_COMPLETED == intent.action){
        //这里每到开机就会收到
        }
    }
}

第一种 静态注册 在manifest文件里添加

 <receiver
            android:name=".faceserver.BootCompleteReceiver">
            <intent-filter android:priority="1000">//设置优先级
                <!--.接收启动完成的广播-->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

这样就完成了
第二种 动态注册,可以写在MyApp里面

/**
     * 注册广播
     * Registration broadcast
     */
    private fun initBroadcast() {
        val filter = IntentFilter() 
        filter.addAction("android.intent.action.BOOT_COMPLETED") 
     
        registerReceiver(BootCompleteReceiver(), filter)
    }

值得注意的是 动态注册在不使用的时候需要销毁
调用 unregisterReceiver();解除注册

两种注册方式的区别
1.静态注册的广播是常驻型广播,即应用程序关闭后,依然能够收到广播。
2.动态注册的广播是非常驻型广播,此时广播是跟随宿主的生命周期的,宿主不在了广播也就不在了。

猜你喜欢

转载自blog.csdn.net/qq_28643195/article/details/107537423