Android四大组件简述之BroadcastReceiver

来源:互联网 发布:windows和mac内核区别 编辑:程序博客网 时间:2024/06/05 18:10

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秒左右,就会导致程序卡死。






0 0