Broadcast与Receiver广播接收器

本文详细介绍了Android中的广播机制,包括广播的定义、应用场景、种类及其内部实现机制。此外还对比了静态注册与动态注册的区别,并深入解析了LocalBroadcastManager的工作原理。

1、广播

    1、广播的定义

       广播是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent可以携带我们要传输的数据。广播的实现机制是比较类似于Java设计模式中的观察者模式。

    2、广播的场景

        A、同一app具有多个进程的不同组件之间的消息通信。
        B、不同app之间的组件之间消息通信

    3、广播的种类

        1、Normal Broadcast :Context.sendBroadcast

        2、system Boradcast: Context.sendOrderedBroadcast

        3、Local Broadcast:只有自身APP广播

2、实现广播-receiver

        1、静态注册:注册完成后就一直运行,静态注册也就是把广播接收者写在Manifest中。静态注册还有个特点是即使receiver所依附的Activity被销毁了,receiver仍然可以接收广播甚至,把App进程杀死,receiver仍然可以接收广播。但是相比于动态注册,静态注册的灵活性还是比较低的。

          2、动态注册:跟随Activity的生命周期。动态注册就是在代码中使用registerReceicer()动态注册广播接收器,同时在Activity的onDestory方法中一定要unregisterReceicer()注销广播,否则会引起内存泄漏。动态注册的Receiver的生命周期是跟随Activity的生命周期的,也就是说当Activity生命结束的时候,Receiver的也随之失效。

          3、静态注册和动态注册的区别:动态注册是在代码中使用registerReceicer()动态注册广播接收器,而静态注册是在项目配置文件Manifest中写的。动态注册会受到Activity的生命周期影响,Activity一旦被销毁,广播接收者也随之失效。而静态注册的广播接收者,即使Activity被销毁了,广播接收器仍然能接收到广播,甚至APP进程别销毁额时候,广播接收器仍然能接收到广播。

3、广播的内部实现机制

        1、自定义广播接收者BroadcastReceiver, 并复写onReceive()方法;

         2、通过Bind机制向AMS(Activity Manager Service)进行注册;

         3、广播发送者通过Binder机制向AMS发送广播;

         4、AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的循环队列中。

          5、消息循环拿到次广播,回调BroadcastReceiver的onReceiver()方法。

4、LocalBroadcastManager详解

          1、使用它发送的广播只在自身app内传播, 因此你不必担心泄露隐私数据。

           2、其他app无法对你的app发送该广播,因为你的app根本就不可能接收到非自身应用发送的该广播,因此不必担心有安全漏洞可以利用

           3、比系统的全局广播更加高效

            LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现的,他的SendBroadcast方法含义并非和我们平时所使用的的一样,他的sendBroadcast其实是通过关联组线程的Handler发送message来实现的。

             既然他的内部是通过实现Handler来发送广播的,那么相比系统广播通过Bind机制来实现肯定高效,同时使用Handler来实现,别的应用无法向我们的应用发送广播,而我们应用内发送的广播也离不开我们的应用。

              LocalBroadcastManager内部内部协作主要是靠两个Map集合:mRecever和mActions,还有一个List集合mPending Broadcast,这个就是储存待接收的广播对象。

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值