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里面注册。
注意动态广播需要反注册
BroadcastReceiver生命周期
BroadcastReceiver生命周期的生命周期比较简单,不会像前面说到的Activity和Service那么复杂。
一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。
因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有长时间的操作,如果需要,就启动一个Service来处理。具体时间也不一定,大概10秒左右,就会导致程序卡死。
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秒左右,就会导致程序卡死。
相关文章推荐
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- android 监听SDCard安装和卸载的代码
- Android接收短信并读取
- Intent和PendingIntent的区别
- Android监听网络状态实现(BroadcastReceiver + Service)
- 理解与应用Android桌面组件AppWidget
- 浅谈android Service和BroadCastReceiver
- Android BroadcastReceiver介绍
- android应用程序如何退出?探究程序退出的方法
- 通过短信窃听器来讲解内容提供者,内容观察者,以及无界面后台运行服务,开机启动和杀死服务后重新启动
- Android应用程序开发以及背后的设计思想深度剖析(2)
- 【开机自启动】开机自启动应用程序
- 6.Android BroadcastReceiver
- Android BroadcastReceiver 详解
- Android 短按耳机键暂停/播放FM功能的实现
- Android常用代码集合
- 【Android】利用广播Broadcast接收SMS短信
- android基础3——系统组件
- Android四大组件之BroadcastReceiver