1 广播的定义
用于程序之间传消息的机制
3、Anroid为什么要这样设计?
大大减少开发工作量和开发周期
作为开发者,只需要掌握BroadcastReceiver
普通广播 (Normal broadcast)
- 所有监听该广播接受者都可以监听到该广播
- 同级别接收先后顺序是随机的(无序)
- 级别低的后收到广播
- 接收器不能截断广播的继续传播,也不能处理广播
- 同级别动态注册高于静态注册
有序广播 (Oredered broadcast)
- 按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大优先级越高,可以终止广播的继续传播,接受者可以修改intent的内容。
- 同级别接收顺序是随机的
- 级别低的后收到
- 能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。
- 能处理广播
- 同级别动态注册高于静态注册
异步广播 (粘滞性滞留广播) ps:已被弃用
- 不能处理结果给下一个接收者,无法终止广播。
- 一直存在
- 可以先发送广播,再注册接收器
- 需要在清单文件添加android.permission.BROADCAST_STICKY权限
BroadReceiver生命周期只有十秒左右,不能直接执行耗时操作,不然会出现ANR(应用程序无响应),也不能用子线程来做,因为每次广播来的时候都会创建一个Reveiver对象,并且调用onReceiver,执行完之后 ,对象会立刻被销毁,子线程也没了
要做耗时操作的话,应该通过发送Intent给Service,由Service来完成。
动态注册广播接受者的话要在Destory回调事件进行unregister
两者及接收广播的区别:
1 动态注册的广播要快于静态注册的广播,不管注册还是的优先级设置多高 不管动态的优先级有多低
2 动态的广播不是常驻广播 ,也就是说国安博跟着activity的生命周期 注意在activity结束前移除广播接收器
静态注册是常驻行 也就是说关闭程序后 如果信息广播来随actitivity 的生命周期。注意:在 activity 结束前 移除广播接收器。
3 在同一个优先级下,谁先启动的快,谁将先接收到广播
动态的注册代码:
UpdateBroadcast broadcast=new UpdateBroadcast();
IntentFilter filter=new IntntFileter(com。UntiUPdate“);
registerReceiver(broadcast,filter);
静态注册代码在配置文件中添加