一、可以发送两种类型的广播。一种是有序广播;一种是无序广播。
无序广播的特点:所有的广播接收者都可以接收到广播。
有序广播的特点:根据广播的优先级接收广播,高优先级先接收,并且高优先级的广播可以利用abortBroadcast终止广播的传送。sendOrderedBroadcast(intent, null, new MyReceiver(), new Handler(), 0, null, null)指定了接收者的广播,不会由于abortBroadcast终止广播的传送而接收不到广播。
处理器的注册:
1、 在代码中用函数代码动态的方式注册。动态注册的处理器必须用代码动态的销毁,每次用来处理消息的就一个实例对象
2、 在配置文件里面静态注册,静态注册有个特点,那就是一旦注册就会一直存在于系统里面,无论应用是否关闭或开关机。(简直就是一个流氓软件病毒啊~)。静态注册每次有处理消息就由系统new一个处理器处理,并销毁
二、注意:当如果要进行的操作需要花费比较长的时间,则不适合放在BroadcastReceiver中进行处理
“在 Android 中,程序的响应( Responsive )被活动管理器( Activity Manager )和窗口管理器( Window Manager )这两个系统服务所监视。当 BroadcastReceiver 在 10 秒内没有执行完毕,Android 会认为该程序无响应。所以在 BroadcastReceiver 里不能做一些比较耗时的操作,否侧会弹出ANR ( Application No Response )的对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent 给 Service ,由 Service 来完成。而不是使用子线程的方法来解决,因为 BroadcastReceiver 的生命周期很短(在 onReceive() 执行后 BroadcastReceiver 的实例就会被销毁),子线程可能还没有结束BroadcastReceiver 就先结束了。如果 BroadcastReceiver 结束了,它的宿主进程还在运行,那么子线程还会继续执行。但宿主进程此时很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。 ”