广播接收者BroadcastReceiver

来源:互联网 发布:淘宝的主营类目怎么改 编辑:程序博客网 时间:2024/06/01 07:52
一、什么是广播?
所有订阅者都可以收听的消息或者频道。
网络--广播(路由器)
android---广播:主要用于进程之间消息通讯的(原理:BindProxy)。(全局的消息。发广播应该要尽量少用)


二、广播分类:1.有序广播;2.无序广播;
1.发广播的;
2.接收广播的;
系统里面会有很多需要进行进程间消息通讯的。需要广播。
比如:手机电量低会有声音提示(360会提示是否需要开启省电模式);时区发生改变的时候(关于时间管理的工具肯定是要监听时区改变的);
监听开机广播(开启就启动我们的应用);监听系统短信接收(支付宝短信验证);


能否监听到系统来短信,并且读取该短信内容,甚至可以直接拦截改短信(让用户完全感觉不到来了短信)
三、
1.继承BroadcastReceiver
2.注册广播接收者(两种方式):
1)清单文件静态注册(常驻广播);
监听短信,拦截短信。
程序退出了,广播是否还可以收到呢?可以。
2)代码动态注册
程序退出了,广播是否还可以收到呢?不可以
思考:两种方式的区别,和场合。
如果我们要实现开机启动我的应用,应该使用哪一种注册?清单注册
清单注册广播,实现过程:当应用安装上去了,系统就会扫描你的清单文件,会记住你的全局广播,
当收到广播的时候系统就会通知符合你的意图过滤条件的接收者。




有序广播优先级范围:-1000~1000(最高级别)
大于1000是什么效果呢?其实就是1000的效果。(提问:如果两个都是写的1000,那怎么办?看源码)
思考:锁屏。有个同学,公司做锁屏的,由于有竞争对手,老板说:我们公司的锁屏一定要在最前面。如何实现?


四、如何自己发送广播呢?


五、监听播出电话,将播出的号码废掉!


六、注意事项:
1.广播是否需要显示调用启动?
显示调用就是  new XXXUtil().download();
不需要的,只需要注册广播接收者给系统,系统会帮你调用启动(create,onreceive)。
2.广播接收者的生命周期是什么样的?
创建和消亡。
创建:每次广播消息到来时,系统都会重新创建一个广播接收者实例(节省内存消耗)。
消亡:1)onReceive()执行完毕就消亡。
2)当onReceive方法里面执行的时间超过了10s,就会gameover。
3.当onReceive方法里面执行的时间超过了10s,就会gameover(why? 因为会ANR,因为卡主线程,因为广播接收者也是运行在主线程里面的)。
启示:广播接收者里面不能做耗时操作。
4.如果要做耗时操作怎么办?
比如:下载东西,应用要监听wifi是否开启,当wifi没有开启就暂停下载,当wifi开启并连上后,自动开启下载。
在收到的广播接收者里面去下载吗?难道开启子线程?不行。why?广播接收者都挂了,子线程就无法控制了随时会被干掉。
怎么办?应该在onReceive里面开启服务service再在里面开启子线程来下载。


七、广播的设计模式是怎么样子的?看源码。
广播接收者(订阅--观察者模式)


看源码:先猜想;或者边看边猜想再不断地验证。
论文:猜想模型。牛顿的经典力学。爱因斯坦牛顿是错的,相对论。
黑客/安全:想象力!!!--->人性的试探。还可以找漏洞、埋数字炸弹。




思考:实现一个锁屏。解除系统原有的锁屏,开机就开启自己的锁屏。(两个知识点:1.广播;2.service服务;3.处理锁屏。)
1 0