/*
* 如何动态注册广播接收者?
*
* 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()
*
*
*/