android_Broadcast

本文深入探讨了Android系统中的广播机制,包括动态注册与静态注册的区别,注册流程及广播的处理过程。重点阐述了消息发布/订阅模式的事件驱动模型,以及如何在应用程序中灵活运用广播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Broadcast机制

    android系统的广播机制,它们的实现机理都是消息发布/订阅模式的事件驱动模型,消息的生产者发布事件,而使用者

订阅感兴趣的事件。

Broadcast注册

    1.第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。

(动态注册)

//生成广播处理   

smsBroadCastReceiver = new SmsBroadCastReceiver();   

//实例化过滤器并设置要过滤的广播   

IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 

//注册广播   

BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);  

    2.第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。(静态注册

        <receiver android:name=".SmsBroadCastReceiver">  

            <intent-filter android:priority="20">  

                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  

            </intent-filter>  

        </receiver>

Broadcast流程

    1,广播的接收者把广播接收器注册到ActivityManagerService中;

    2,广播的发送者同样是把广播发送到ActivityManagerService中,由ActivityManagerService去查找注册了这个广播的接收者,然后把广播分发给它们。

    3.  广播分发的过程,其实就是把这个广播转换成一个消息,然后放入到接收器所在的线程消息队列中去,最后就可以在消息循环中调用接收器的onReceive函数了。ActivityManagerService把这个广播放进接收器所在的线程消息队列后,就返回了,它不关心这个消息什么时候会被处理,因此,对广播的处理是异步的,即调用sendBroadcast时,这个函数不会等待这个广播被处理完后才返回。

注:

    动态注册要比静态注册轻量,在清单中声明了<receiver>可以使用setComponentEnabledSetting()方法来启用和禁用它。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值