interView - BroadcastReceiver

来源:互联网 发布:键盘手走红网络 编辑:程序博客网 时间:2024/05/21 18:41


1.BroadcastReceiver作用?

广播是一种广泛应用于应用程序之间传输信息的的机制。而BroadcastReceiver是对发送出来的广播进行过滤接收并响应的的一类组件。

BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个通知后,BroadcastReceiver可以启动Activity作为响应,就是在注册了BroadcastReceiver的Activity里通过onRecevie(Context curContext,Intent broadcastMsg)来处理,或者通过NotificationManager提醒用户,或者启动service等。

BroadcastReceiver对已经注册了广播的程序进行广播,通知对应的程序。广播Intent的发送是通过sendBroadCast(),sendOrderedBroadCast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。


2.BroadcastReceiver的两种类型

广播接受者分为两种类型:
1. 有序的广播. 短信到来的广播 电话拨打的广播 
-1000~1000  设置广播的优先级  
 android:priority="1000"
从高优先级->低优先级 依次传递 
abortbroadcast() 方法  可以终止广播事件 

2. 无序广播.
没有优先级 任何人 注册广播接受者的人,都可以接收到广播.
没有abortboradcast()方法 
sendBroadcast(intent); // 发送一条广播 
sendOrderedBroadcast(intent, receiverPermission); // 发送一条有序广播
 sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras)
如果发送广播的时候 使用的 上面的api发送出去的广播,第三个参数 resultReceiver 指定了广播的接受者。
即便是中间我把广播给终止 abortbroadcast() 
resultReceiver 还是会接受到广播。


3.BroadcastReceiver生命周期?

(1)BroadcastReceiver生命周期中仅有一个回调方法:void onReceive(Context curContext,Intent broadcastMsg)

当接收器接收到一条broadcast消息,Android就会调用onReceiver(),并传递给它一个Intent对象,这个对象携带着那条broadcast消息,当执行这个方式时,BroadcastReceiver是活动的,这个方法返回时,它就终止了,这就是BroadcastReceiver生命周期。

(2)由于BroadcastReceiver的生命周期很短,一个带有活动的BroadcastRecevier的进程是受保护的,以避免被干掉;但是别忘了有一点,Android会在任意时刻干掉那些携带不再活动的组件的进程,所以很可能会造成这个问题。

(3)解决上述问题的方案采用一个Service来完成这项工作,Android会认为那个进程中(Service所在的进程)仍然有在活动的组件。


4.BroadcastReceiver注册方式?

(1) 注册广播事件:注册方式有两种,两种方式都需要IntentFilter.
1. 清单文件里注册:  一旦应用程序被部署到手机, 广播接受者就会生效
2. 代码里面注册: 一旦代码所在的进程被杀死了, 广播接受者就失效了.
(2)发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action.
(3)接收广播事件:当发送的广播接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它.onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。

0 0
原创粉丝点击