广播接收器的生命周期解读

广播接收器只有一个回调方法: 
void onReceive(Context curContext, Intent broadcastMsg) 
当广播消息抵达接收器时,Android 调用它的 onReceive()方法并将包含消息的 Intent 对象传递给它。广播接收器仅在它执行这个方法时处于活跃状态。当 onReceive()返回后,它即为失活状态。 
广播接收器超过10s没执行完毕就会报ANR。 
拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死。但仅拥有失活状态组件的进程则会在其它进程需要它所占有的内存的时候随时被杀掉。 
这种方式引出了一个问题:如果响应一个广播信息需要很长的一段时间,我们一般会将其纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户交互过程的流畅。如果 onReceive()衍生了一个线程并且返回,则包涵新线程在内的整个进程都被会判为失活状态(除非进程内的其它应用程序组件仍处于活跃状态),于是它就有可能被杀掉。 
这个问题的解决办法: 
令 onReceive()启动一个新服务,并用其完成任务,于是系统就会知道进程中仍然在处理着工作。

abortBroadcast();可以拦截有序广播sendOrderBroadcast();常用于拦截垃圾短信等 
终止无序广播会报异常,java.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast

你可能感兴趣的:(android)