BroadcastReceiver
- 广播的注册和服务很类似,但是不希望一直处于监听状态,于是就需要动态的注册和取消注册广播了。
- 利用regristReceiver方法进行注册。unregristReceiver方法注销注册。
- 广播注册传值在android5.0之前是可以像Intent那样,利用一个action隐式传值的,但是在5.0之后只能用显示传值了。
- 一般的注册的方法是:sendBrocast方法发送广播,
BroadcastReceiver优先级
- 可以在intent-filter里面设置优先级,数字越大,优先级越高,priority设置优先级。
- abortBroadcast()可以中断发送广播,但是不能中断sendBroadcast()方法,可以中断sendOrderbroadcast()方法。
广播接收器注册一共有两种形式 : 静态注册和动态注册.
- 两者及其接收广播的区别:
- 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\
- 2.动态注册广播不是 常驻型广播 ,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
静态注册是常驻型 ,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。 - 3.在同一个优先级下,谁先启动的快,谁将先接收到广播.
动态注册代码:
UpdateBroadcast broadcast= new UpdateBroadcast();
IntentFilter filter = new IntentFilter("com.unit.UPDATE");
registerReceiver(broadcast, filter);
静态注册代码(在配置文件中添加):
广播的类型
普通广播的发送和接收:
sendBroadcast(intent);
[mw_shl_code=java,true]
[/mw_shl_code]
1,他决定该广播的级别,级别数值是在-1000到1000之间,值越大,优先级越高;
2,同级别接收是先后是随机的;级别低的收到广播;
3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;
4,不能截断广播的继续传播,
5,实验现象,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。如果都没有优先级,代码注册收到为最先。
有序广播的发送和接收:
sendOrderedBroadcast(intent,receiverPermission);
sendOrderedBroadcast(intent,receiverPermission, resultReceiver,
scheduler,initialCode, initialData, initialExtras)
receiverPermission这是权限,一个接收器必须持以接收您的广播。如果为null,不经许可的要求。
resultReceiver您自己BroadcastReceiver来当作最后的广播接收器。
调度自定义处理程序,用以安排resultReceiver回调;如果为null将语境中的主线程举行。
initialCode一种结果代码的初始值。通常为Activity.RESULT_OK。这个值是-1;为其他int型也可以,如0,1,2;
initialData一种结果数据的初始值。通常情况下为空,是String类型;
initialExtras一种结果额外的初始值。通常情况下为空,是Bundle;
1, 该广播的级别有级别之分,级别数值是在-1000到1000之间,值越大,优先级越高;
2, 同级别接收是先后是随机的,再到级别低的收到广播;
3, 同级别接收是先后是随机的,如果先接收到的把广播截断了,同级别的例外的接收者是无法收到该广播的。(abortBroadcast())
4,能截断广播的继续传播,高级别的广播收到该广播后,可以决定把该钟广播是否截断掉。
5,实验现象,在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。
异步广播的发送和接收:
sendStickyBroadcast(intent);
当处理完之后的Intent,依然存在,直到你把它去掉。
发这个广播需要权限
注意点