android粘性广播何时结束,Android之粘性广播理解
BroadcastReceiver,作为一个广播接收者,因为android组件之间消息的传递基于intent,所以广播接收者想要接收什么类型的广播,将receiver标签下的intent-filter标签下的action标签的值置为那个广播类型即可,如
上面这段代码其实就注册了两个广播接收的类型,系统开机启动完成时的广播和短信到来的广播(注意加上短信接受权限)都会被接收到,然后可以再onReceive()方法里面写上你想写的代码了。
额外提个事,权限问题一定要加上,现在的logcat里面Permission denied的提示都不是红色的了,改成橙色的,我还以为我这没出问题,找了半天代码的问题,结果后来还是发现权限配错了,本来想拦截拨出的电话的,结果没配权限怎么都拿不到数据啊,找了十几分钟。虽然相对前些天我找一个上午的权限问题进步多了,但是我还是这么认为,玩android权限问题都要找个十来分钟的话那就太2了。
除了在清单文件中配置以外,也可以在代码中订阅
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
Receiver receiver = new Receiver();
registerReceiver(receiver, filter);
Receiver是你自己写的继承自BroadcastReceiver的类。IntentFilter就对应着Action啦。
还有一个细节是sendBroadcast的三种发送方法。
sendBroadcast(),sendOrderedBroadcast()和
sendStickyBroadcast()
sendBroadcast()这个方法的广播是能够发送给所有广播接收者,按照注册的先后顺序,如果你这个时候设置了广播接收者的优先级,优先级如果恰好与注册顺序相同,则不会有任何问题,如果顺序不一样,会出leaked IntentReceiver 这样的异常,并且在前面的广播接收者不能调用abortBroadcast()方法将其终止,如果调用会出BroadcastReceiver trying to return result during a non-ordered broadcast的异常,当然,先接收到广播的receiver可以修改广播数据。
sendOrderedBroadcast()方法顾名思义就是priority的属性能起作用,并且在队列前面的receiver可以随时终止广播的发送。还有这个api能指定final的receiver,这个receiver是最后一个接收广播时间的receiver,并且一定会接收到广播事件,是不能被前面的receiver拦截的。实际做实验的情况是这样的,假设我有3个receiver依序排列,并且sendOrderedBroadcast()方法指定了一个finalReceiver,那么intent传递给这4个Receiver的顺序为Receiver1-->finalReceiver-->Receiver2-->finalReceiver-->Receiver3-->finalReceiver。这个特性可以用来统计系统中能监听某种广播的Receiver的数目。
sendStickyBroadcast()字面意思是发送粘性的广播,使用这个api需要权限android.Manifest.permission.BROADCAST_STICKY,粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。
下面是广播接收者的生命周期以及一些细节部分:
1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4.耗时的较长的工作最好放在服务中完成
至于广播接收者接收用户的短信,实现ip拨号等功能,明白上面的话实现起来就轻而易举了。
android粘性广播何时结束,Android之粘性广播理解相关推荐
- android广播intent原理,Android中BroadcastReceiver详解
BroadcastReceiver是什么? Android app可以发送广播也可以接收系统或者其它app发送的广播,是发送/订阅的设计模式.这些广播被发送当重要的事件发生的时候.例如,安卓系统发送广 ...
- android 广播解绑,Android四大组件之BroadCast
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...
- Android活动,控件,碎片,广播,数据库小总结
系统架构与开发环境搭建 3月2日Android Activities代码练习 3月5日 Intent的应用与传值 3月9日 1:显式Intent与隐式Intent的区别 显式Inten ...
- android oreo_Android Oreo隐式和显式广播接收器
android oreo In this tutorial, we'll discuss the changes in Broadcast Receiver since Android Oreo. W ...
- android两种广播注册区别,Android 注册广播的两种方式对比
Android 注册广播的两种方式对比 1.常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到, 他的注册方式就是在你的应用程序中的AndroidManif ...
- android s静态广播,重走android(3)广播 · sk600’s Studio
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 广播作为android四大组件之一,应用非常广泛,主要通过intent这个"介质"来传递信息,可以完 ...
- android广播唤醒app,Android APP唤醒打开其他APP
App(a):判断是否为App(b)是否存在,不存在选择下载 存在后台状态直接唤醒 否则直接打开 App(a)部分代码 if (checkPackage("com.xxx.android&q ...
- android广播代码汇总二__有序广播
分析 普通广播(Normal Broadcast): 一,优缺点:和有序广播的优缺点相反! 二,发送广播的方法:sendBroadcast() 有序广播(Ordered Broadcast): 一,优 ...
- android 4.0.3开机时不能收到广播
============问题描述============ 在android 4.0.3的手机上,receiver在手机开机后收不到启动广播,代码如下: 配置文件: <receiver an ...
- android 发送显示广播,如何查看Android系统当前发送了什么广播
作者:Yogi 前言:在开发的时候,我们有时想知道我们定义的广播是否成功发送,或者想知道做了某个操作,系统是否会发送广播,并且发送了什么广播.如果说能够直接查看到,那是非常好的,这样就不需要googl ...
最新文章
- windows 7 下安装 Android 设备驱动
- sulime text 3
- 椭圆中心到椭圆切线的距离
- ng-content的一个实际例子
- html模块殃射,【Web前端问题】webpack打包后,module模块中的函数无法在html标签的事件中调用?...
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
- python群发邮件1000人-python读取excel群发邮件(一)
- java_函数的概述
- 51CTO-redis-集群安装以及动态扩容
- mysql 自动安装脚本_mysql 5.7自动安装脚本
- 记一次线程池任务执行异常
- 带你十分钟了解BFC(渡一教育笔记)
- everedit选择_【EverEdit怎么用】EverEdit好不好_使用技巧-ZOL软件百科
- EntityFramework 连接数据库出错
- (6)数据结构-共享栈
- Java使用itextpdf生成PDF文件并添加斜面水印并完成下载(图片导出pdf)
- MATLAB导出矢量图
- Systrace抓取
- 移动端车牌识别,交警助力
- Caltech-UCSD Birds 200 (CUB) 数据库预处理
热门文章
- linux上删除rime方案_超强的输入法:rime的配置(linux)
- 为什么说python是世界上最好的语言-《权力的游戏》告诉你,为啥 Python 是世上最好的语言...
- C语言switch语句无break
- 个人介绍 php 怎么说,个人介绍怎么写
- android 双向加密算法,Android编程加密算法小结(AES、Base64、RAS加密算法)
- 获取当前的url并移除不想要的字段
- sql注入漏洞--sqlmap使用
- buff系统 游戏中_arpg游戏的技能系统和buff系统的一种实现
- POJ 3295 Tautology(构造)
- c语言 统计数量用count_C语言中count是什么意思?