Android中的BroadCastReceiver(广播接收者)————快速应用

/*
 * 如何动态注册广播接收者?
 * 
 * context里有两个方法:
 * registerReceiver(receiver, filter);
 * unregisterReceiver(receiver);
 * 
 * 注册时需要两个参数:Receiver对象和intentFilter对象
 * 其中,Receiver要实现onReceive方法,intentFilter需要添加action
 * 
 * 同时不要忘记unregisterReceiver
 * 
 */

/*
 * 如何注册静态广播?
 * 
 * 1.新建一个类,继承自BroadcastReceiver,重写onReceive方法
 * 2.在Manifest文件中注册这个Receiver,并设置intentfilter,添加需要监听的action
 * 
 */

/*
 * 如何发送广播?
 * 1.创建intent对象,添加action
 * 2.使用Context中的sendBroadcast()和sendOrderedBroadcast(),将intent传入
 * 3.sendOrderedBroadcast中的第二个参数一般为null
 */

/*
 * 如何设置和中断有序广播?
 * 1.在intentfilter里设置优先级(如100、2147483647)
 * 2.onReceive() ---> abortBroadcast()
 */

/*接收顺序
 * 首先无序广播,不能中断,分发机制有点类似散列发送。这种广播的的发送为:context.sendBroadcast
 * 这种广播是不能中断的,请看API说明。
 * 其次为有序广播,可以中断。
 * 这种广播,以我的理解可能存在很大的BUG,短信这块广播的发送BUG现在被QQ和360利用,可能在以后的版本中会修订。
 * 它是一个按一种优先级顺序发送,即按某种messagequere队列发送,其中队列中的任何广播接收者都可以终端该广播,导致它之后的成员不能接收到广播。
 * 我们首先看这个队列是怎么形成的:(以下是假想+测试验证,有待代码验证)
 * 假设我们广播优先级别都设成:2147483647(注:最大int形整数)


 * 首先动态注册优先级别最高
 * 其次静态注册


 * 在动态注册中
 * 最早动态注册优先级别最高


 * 在静态注册中
 * 最早安装的程序,静态注册优先级别最高(注:安装APK会解析af.xml,把其加入队列)
 * 注意这里安装 是指adb install xxx.apk或者手机上安装应用。
 * 然后才是adb push到其他目录的应用
 * 可能的原因是手机查询应用的时候会先去特定目录解析应用,所以广播注册会出现这种差别。adb push 到system/app下会比安装的优先级高吗?这有待你的验证,我还没验证。


 * 然后都是安装的应用中
 * 首先安装的优先等级最高


 */

/*
 * 如何使用本地广播?(只在本程序内发送和接受的广播)
 * 
 * **无法通过静态方式注册
 * 
 * 1.获得LocalBroadcastManager对象
 * 2.动态注册广播接收者(使用LocalBroadcastManager.registerReceiver(receiver,intentfilter))
 * 3.LocalBroadcastManager.sendBroadcast()
 * 
 * 
 */

你可能感兴趣的:(android)