您的位置:首页 > 移动开发 > Android开发

Android四大组件简述之BroadcastReceiver

2014-02-25 20:45 381 查看
BroadcastReceiver
BroadcastReceiver是Android四大组件之一,它被用来接收sendBroadcast()的所发送的intents。BroadcastReceiver详细介绍可以参考官网文档:http://developer.android.com/reference/android/content/BroadcastReceiver.html

BroadcastReceiver分类

android中主要分为两种广播:

普通广播(sent with Context.sendBroadcast):所有的接受者接受到广播的顺序是无序的,通常在一个时间。这样效率更高,但是在传播过程中接受者不能终止掉广播。 

有序广播(sent with Context.sendOrderedBroadcast) :有序广播可以发送给指定的广播接受者。每个广播接受者在接受到有序广播之后,可以给下一个接受者传递一个结果,也可以直接终止掉广播的传送,那样之后的广播接受者就接受不到了。广播接受者的接受顺序可以通过 android:priority 属性来控制,相同优先级的接受者执行的顺序是任意的。

注意:虽然Intent被用来发送和接受广播,但是在广播机制中,避免通过Context.startActivity() 开启Activity。因为开启Activity是一个前台的操作来与用户进行交互,发送广播是一个后台的操作,用户一般察觉不到它的发生。

注册BroadcastReceiver

如其他组件一样,BroadcastReceiver是要注册的。你可以通过Context.registerReceiver() 动态注册广播或者在进行AndroidManifest.xml 通过<receiver>节点静态注册

1.静态注册:
<receiver android:name=".StaticBroadcastReceiver">
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>

2.动态注册

动态注册,顾名思义,在需要的时候就注册这个广播,不需要的时候就注销掉。动态注册不需要在AndroidMainifest里面注册。
receiver = new StaticBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
context.registerReceiver(receiver, filter);


注意动态广播需要反注册
this.unregisterReceiver(receiver);


BroadcastReceiver生命周期

BroadcastReceiver生命周期的生命周期比较简单,不会像前面说到的Activity和Service那么复杂。

一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。

因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有长时间的操作,如果需要,就启动一个Service来处理。具体时间也不一定,大概10秒左右,就会导致程序卡死。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BroadcastReceiver