BroadcastReceiver有哪些必须掌握的17个知识点?

摘要:前言 距离上次更新过去一周多了,打破了之前两到三天一更的惯例,主要是要总结的内容太多了。 本篇文章将对 开发中,可能用到的知识点,可能遇到的问题进行总结。 希望本文能帮助你揭开 开发过程中的难题。 最后,希望大家都能有所收获,欢迎食用! 文
前言 距离上次更新过去一周多了,打破了之前两到三天一更的惯例,主要是要总结的内容太多了。 本篇文章将对 BroadcastReceiver 开发中,可能用到的知识点,可能遇到的问题进行总结。 希望本文能帮助你揭开 Android 开发过程中的难题。 最后,希望大家都能有所收获,欢迎食用! 文章目录 方便大家学习,我在 GitHub 上建立个 仓库 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所以大家可以直接关注该仓库,以免错过精彩内容! 仓库地址: 超级干货!精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star ! 一、BroadcastReceiver BroadcastReceiver,顾名思义就是“广播接收者”的意思,它是Android四大基本组件之一。 这种组件本质上是一种全局的监听器,用于监听系统全局的广播消息。 它可以接收来自系统和应用的的广播。 1.1 什么是 BroadcastReceiver 是四大组件之一, 主要用于接收 app 发送的广播 内部通信实现机制:通过 android 系统的 Binder 机制. 1.2 广播分为两种 1.2.1 无序广播 也叫标准广播,是一种完全异步执行的广播。 在广播发出之后,所有广播接收器几乎都会在同一时刻接收到这条广播消息,它们之间没有任何先后顺序,广播的效率较高。 优点: 完全异步, 逻辑上可被任何接受者收到广播,效率高 缺点: 接受者不能将处理结果交给下一个接受者, 且无法终止广播. 1.2.2 有序广播 是一种同步执行的广播。 在广播发出之后,同一时刻只有一个广播接收器能够收到这条广播消息,当其逻辑执行完后该广播接收器才会继续传递。 调用 SendOrderedBroadcast() 方法来发送广播,同时也可调用 abortBroadcast() 方法拦截该广播。可通过 <intent-filter> 标签中设置 android:property 属性来设置优先级,未设置时按照注册的顺序接收广播。 有序广播接受器间可以互传数据。 当广播接收器收到广播后,当前广播也可以使用 setResultData 方法将数据传给下一个接收器。 使用 getStringExtra 函数获取广播的原始数据,通过 getResultData 方法取得上个广播接收器自己添加的数据,并可用 abortBroadcast 方法丢弃该广播,使该广播不再被别的接收器接收到。 总结 按被接收者的优先级循序传播 A > B > C , 每个都有权终止广播, 下一个就得不到 每一个都可进行修改操作, 下一个就得到上一个修改后的结果. 1.2.3 最终广播者 Context.sendOrderedBroadcast ( intent , receiverPermission , resultReceiver , scheduler , initialCode , initialData , initialExtras ) 时我们可以指定 resultReceiver 为最终广播接收者. 如果比他优先级高的接受者不终止广播, 那么他的 onReceive 会执行两次 第一次是正常的接收 第二次是最终的接收 如果优先级高的那个终止广播, 那么他还是会收到一次最终的广播 1.2.4 常见的广播接收者运用场景 开机启动, sd 卡挂载, 低电量, 外拨电话, 锁屏等 比如根据产品经理要求, 设计播放音乐时, 锁屏是否决定暂停音乐. 1.3 BroadcastReceiver 的种类 1.3.1 广播作为 Android 组件间的通信方式,如下使用场景: 对前一部分 “ 请描述一下 BroadcastReceiver ” 进行展开补充 APP 内部的消息通信。 不同 APP 之间的消息通信。 Android 系统在特定情况下与 APP 之间的消息通信。 广播使用了观察者模式,基于消息的发布 / 订阅事件模型。广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。 BroadcastReceiver 本质是一个全局监听器,用于监听系统全局的广播消息,方便实现系统中不同组件间的通信。 自定义广播接收器需要继承基类 BroadcastReceiver ,并实现抽象方法 onReceive ( context, intent ) 。
阅读全文