广播分为动态广播和静态广播
静态广播:1. 常驻
2. 当App被杀死时收到广播会被唤醒
3. 不受组件(如Activity)生命周期的影响
动态广播:1. 永远比静态快
2. 不常驻,生命周期跟随Activity的生命周期
3. 要记得注销
BroadcastReceiver实例的生命周期很短,执行完就被销毁,每次都重新创建,所以里面的成员变量无法保存它们的值。
内部机制(动态注册广播情况):
1. 通过sendBroadcast把一个广播通过Binder发送给AMS,AMS根据这个广播的Action类型找到相应的广播接收器,然后把这个广播放到自己的消息队列里。
2. AMS在消息循环中处理这个广播,并通过binder把广播分发给注册的广播接收分发器ReceiverDispatcher,ReceiverDispatcher把这个广播放进Activity所在线程的消息队列中去。
3. ReceiverDispatcher的内部类Args在Activity所在的线程消息循环中处理这个广播,最终将广播分发给注册的对应BroadcastReceiver进行处理。
网友评论