• Broadcast相关问题总结


    广播

    定义

    在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据;

    1.广播可以在不同应用程序之间传递信息,即应用定义了相应的action,就可以接收到数据;(这个也不一定)
    2.可以通过广播来实现service与Activity的数据交互,比如通知Activity更新UI;(这个一般不这么做)

    场景

    1. 同一个app内,多个进程的不同组件之间的消息通信;
      比如app内有一个主进程,一个定位地图的进程,可以通过广播来进行两个进程之间的通信(我的观点是不如老老实实用binder)

    2. 不同app之间的组件之间消息通信;
      两个app之间通过发送广播来传递消息

    种类

    1. Normal Broadcast: Context.sendBroadcast (无序广播)

    2. System Broadcast: Context.sendOrderedBroadcast (有序广播)

    3. local Broadcast: 只在自身app内部传播 (本地广播)

    实现广播

    1. 静态广播

    注册完成就一直运行
    将广播接收者写在Manifest.xml文件中;
    静态广播的特点是:
    所依赖的Activity被销毁后,依然能接收到广播,甚至app进程被杀掉后也能接收到广播

    2. 动态广播

    跟随Activity的生命周期
    在代码中调用registerReceiver方法来注册广播;
    动态注册广播一定要注意:
    在onDestroy方法中执行unRegisterReceiver方法解除注册,否则会引起内存泄漏;
    同时动态注册的广播生命周期是跟随Activity生命周期的,所以当Activity被销毁了,动态注册的广播也就失效了;

    3. 动态广播和静态广播的区别

    1. 动态广播是在代码中注册,静态广播是在manifest.xml文件中写死的

    2. 动态广播受Activity生命周期的影响,Activity销毁了,广播也就失效了;静态注册广播即使Activity被销毁了,甚至进程被杀掉,也能收到广播;

    广播实现机制

    1. 自定义广播接收者BroadcastReceiver,并复写onReceive方法;
    2. 通过Binder机制向ams进行注册;
    3. 广播发送者通过Binder机制向ams发送广播;
    4. ams查找符合响应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
    5. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceiver方法;

    LocalBroadcastManager 详解

    本地广播有如下几个特点:

    1. 使用它发送的广播将只在自身app内传播,不必担心泄漏隐私数据;
    2. 其他的app无法对你的app发送该广播,因为你的app根本就不可能接收到非自身应用发送的该广播,因此不必担心安全漏洞
    3. 比系统的全局广播更加高效

    分析:

    1. LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现,它的sendBroadcast方法含义并非我们平时所用到的那样,它的sendBroadcast方法实际上是通过handler发送一个Message实现的

    2. 既然它内部是通过Handler来实现广播的发送,那么相比系统广播通过binder来实现肯定更加高效了,同时使用Handler来实现,别的应用也无法像我们的应用发送广播,而我们的应用广播也不会离开我们的应用。

    3. LocalBroadcastManager内部协作主要是靠两个map集合:MReceivers和mActions,当然还有一个list集合mPendingBroadcasts,这个主要存储待接收的广播对象

  • 相关阅读:
    android日期处理工具类
    android图片处理工具类
    android动画工具类
    android之Toast工具类
    android日志工具类
    androidApp开发之“BMI指数计算”
    android游戏开发之“找出红心A”
    android之获取联系人并按拼音排序
    android之音乐播放和音效播放
    .net学习路线
  • 原文地址:https://www.cnblogs.com/cfdroid/p/16450345.html
Copyright © 2020-2023  润新知