Android知识程序员

Broadcast与BroadcastReceiver

2015-10-31  本文已影响0人  我欲举头望明月

BroadCast的类型

BroadCast方法

void sendBroadcast (Intent intent, String receiverPermission)
void sendBroadcast (Intent intent)

void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)
void sendOrderedBroadcast (Intent intent, String receiverPermission)
参数:
initialCode, initialData, initialExtras用来传递给Receiver
resultReceiver为最后一个接收到该Broadcast的Receiver。即使广播被中断了,该Receiver也会接收到该广播。
该Receiver不需要注册。

void sendStickyBroadcast (Intent intent)
void sendStickyOrderedBroadcast (Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)
void removeStickyBroadcast (Intent intent)
从系统的消息容器中移除该广播

BoradCastReceiver使用流程

  1. 继承BroadcastReceiver类,并重写void onReceive (Context context, Intent intent)方法。
  2. 注册BroadcastReceiver

注意事项

在注册Receiver时,可以通过指定权限来防止接收无权限应用的广播。


如果BroadcastReceiver在10秒内没有执行完毕,那么会弹出ANR对话框。
可以在接收到Broadcast之后,启动Service来完成任务。


在Intent中设置了FLAG_RECEIVER_REGISTERED_ONLY flag时,只有动态注册的Receiver才能够接收到广播。


在动态注册中,最早动态注册优先级别最高;
在静态注册中,最早安装的程序,静态注册优先级别最高


从Android 3.1开始,系统增加了Intent的flag。如下:

在发送广播时,不管是什么广播类型,系统默认直接增加了值为FLAG_EXCLUDE_STOPPED_PACKAGES的flag,导致即使是静态注册的广播接收器,对于其所在进程已经退出的app,同样无法接收到广播。

参考
http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

上一篇 下一篇

猜你喜欢

热点阅读