Broadcast广播的分类
BroadcastReceiver
(广播接收器),属于 Android
四大组件之一。在分析ANR产生原因时,涉及到部分广播的知识,我将针对广播类型,做个记录:
1. 普通广播(Normal Broadcast)
即开发者自身定义intent的广播(最常用),也就是并行广播。发送广播使用如下:
Intent intent = new Intent();
//对应BroadcastReceiver中intentFilter的action
intent.setAction(BROADCAST_ACTION);
//发送广播
sendBroadcast(intent);
2. 有序广播(Ordered Broadcast)
定义(也就是串行广播)::
发送出去的广播被广播接收者按照先后顺序接收
有序是针对广播接收者而言的
广播接受者接收广播的顺序规则(同时面向静态和动态注册的广播接受者)
按照Priority属性值从大-小排序;
Priority属性相同者,动态注册的广播优先;
特点:
接收广播按顺序接收
先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不再接收到此广播;
先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播
具体使用
有序广播的使用过程与普通广播非常类似,差异仅在于广播的发送方式:
sendOrderedBroadcast(intent);
3、前台广播和后台广播
Android的广播有前台广播和后台广播的区别,他们分别对应一个队列,前台广播对应的是前台队列,后台广播对应的是后台队列。
/**
91 * Lists of all active broadcasts that are to be executed immediately
92 * (without waiting for another broadcast to finish). Currently this only
93 * contains broadcasts to registered receivers, to avoid spinning up
94 * a bunch of processes to execute IntentReceiver components. Background-
95 * and foreground-priority broadcasts are queued separately.
96 */
97 final ArrayList<BroadcastRecord> mParallelBroadcasts = new ArrayList<>();
98
99 /**
100 * List of all active broadcasts that are to be executed one at a time.
101 * The object at the top of the list is the currently activity broadcasts;
102 * those after it are waiting for the top to finish. As with parallel
103 * broadcasts, separate background- and foreground-priority queues are
104 * maintained.
105 */
106 final ArrayList<BroadcastRecord> mOrderedBroadcasts = new ArrayList<>();
在发送广播时,可以通过设置Intent.FLAG_RECEIVER_FOREGROUND属性来将广播定义为前台广播,如果未定义,默认使用后台广播。
Intent intent = new Intent("android.intent.action.xxx");
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intent);
前台广播和后台广播超时时间是不一样的,前台广播是BROADCAST_FG_TIMEOUT(10s),后台广播是BROADCAST_BG_TIMEOUT(60s),这里的超时时间是指单个广播接收器可以处理的最大时间。
通过对源码的分析,可以得出一条重要的结论:只有串行队列中的接收器存在超时问题,如果是普通广播,以及动态注册的接收器是不存在超时的。
了解了超时机制,可以总结一下前台广播和后台广播。
如果我们希望广播能够更快地被接收,那么就可以将其定义成前台广播。前台广播为什么比后台广播快呢?主要有以下几点原因:
1、系统默认的广播是后台广播,因此前台广播队列比后台广播队列空闲。
2、前台广播的超时时间是10s,后台广播的超时时间是60s,开发者必须限制前台广播的数量,否则会导致ANR,同时在接收器不能有耗时的操作。
3、如果BroadcastQueue正在处理一个串行队列中的BroadRecord,当此时发送普通广播,对应动态注册的接收器还是可以收到的,有序广播或者静态注册的接收器需要排队,这也是并行处理和串行处理的区别。
具体分析,可以参考文章https://blog.csdn.net/wangsen927/article/details/116298801
Broadcast广播的分类相关推荐
- 张萌韩墨羽——BroadCast 广播
BroadCast 广播 广播作用以及机制 其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机 ...
- Broadcast广播-Android
一.Broadcast 1.定义 在 Android 中,Broadcast 是一种在应用程序之间传输信息的机制,要发送的广播内容是一个 Intent,这个 Intent 中可以携带我们要传送的数据. ...
- Upd通信之QUdpSocket的unicast单播、broadcast广播、multicast组播
简 述: 了解Upd通信之QUdpSocket的unicast单播.broadcast广播.multicast组播,书写一个简单地例子:然后写了一个小的Qt例子,用来实现和验证它的空间的一些属性和功能 ...
- 【Android入门】5、Broadcast 广播、Kotlin 的高阶函数、泛型、委托
六.BroadCast 广播 广播用于在Android系统内实现通知,概念较为简单 为了实现上述效果, 代码如下 基础类如下, 定义了receiver, 当收到消息时, 触发receiver逻辑(弹窗 ...
- Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- Android Broadcast广播机制分析
基于Android 6.0的源码剖析, 分析android广播的发送与接收流程. 一.概述 广播(Broadcast)机制用于进程/线程间通信,广播分为广播发送和广播接收两个过程,其中广播接收者Bro ...
- 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据
例如:A界面要收到B界面的更变信息 一.A界面注册广播 private static final String INTENT_BROADCAST = "android.intent.acti ...
- Android开发学习—— Broadcast广播接收者
1.现实中:电台要发布消息,通过广播把消息广播出去,使用收音机,就可以收听广播,得知这条消息. Android中:系统在运行过程中,会产生许多事件,那么某些事件产生时,比如:电量改变.收发短信. ...
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
最新文章
- 干货收藏 | 计算机学习绝对不能错过的10大网站(内附网站链接)
- 资源丨机器学习进阶路上不可错过的28个视频
- 计算机组成原理A原是什么,计算机组成原理A
- 我国近四成程序员单身 盘点各国IT从业者生存现状
- Jupyter 配置 Java环境,写Java代码,测试成功
- 实体类的动态生成(二)
- js获取日期实例之昨天今天和明天、后天
- 什么是函数式编程思维?
- Struts2中Action接收参数的方法
- 洛谷—— P2251 质量检测
- 深度强化学习之稀疏奖励(Sparse Reward)
- 软件观念革命:交互设计精髓_交互的学习与应用指南
- java简单计算器实现
- Hadoop | 初学基础原理
- codeforce 379C New Year Ratings Change 题解
- 3.2.2 方法的重写 3.2.3 super关键字
- 2012-11-26四六级词汇#9317;-----…
- 最小公共子串——力扣
- ContextMenu(上下文菜单)的用法
- 27岁程序员转职赏金猎人:一个漏洞10万美元,比工资香多了
热门文章
- oracle标志位作用是什么意思,oracle实现查询某状态标志位最大连续出现次数
- 无法安装64位版本的office_手机微信有两个版本,32位和64位,你的微信是多少位?...
- 最新!又一批高校官宣:推迟开学!各地政策如何安排?
- python牛顿迭代法求平方根_牛顿迭代法计算平方根
- 弘辽科技:京东店铺布局,打破无流量无转化局面
- amd显卡对linux兼容,SteamOS添加对AMD及Intel显卡支持
- mysql修改主服务器地址,怎么修改mysql服务器地址
- windows socket网络编程一:最简单的服务器和客户端搭建
- 2019将会是社交新零售的黄金时代
- 网站快照回档如何处理