Android BroadcastReceiver总结
2013-11-09 23:33
330 查看
一、BroadcastReceiver是什么?
BroadcastReceiver用于系统级别的通信使用。在Android系统中程序(进程)间通信可以使用ADIL、线程间通信可以使用Handler、AsyncTask、而系统级别的系统是否打开WIFI网络,插拔SDCARD,电量低的通知等,都可以通过广播获取到这些信息,当然也可以自定义广播来作为一种通信工具。建议:
广播的启动和关闭可以放置在任意地方,官网建议放在Activity.onResume() 开启和Activity.onPause()关闭的原因是节省系统的开销。
只要当前Activity不在活动状态广播就会被关闭。不这样启动和关闭的结果是如果用户已经切换到其他应用或者锁屏,当前应用的广播接收因为没有关闭而在一直运行。
官方文档也不建议在Activity.onSaveInstance() ,因为这个放在并不是每次关闭Activity的时候都会被调用。
二、广播启动与接收
广播的实现步骤分为两步广播注册与发送接收广播1. 两种广播的注册方式
1.1 静态注册
在AndroidMainfast.xml中注册< receiver android:name = ".content.BroadcastReceiverDemo" > < intent-filter> < action android:name ="demo.content.intent.action.BroadcastReceiverActivityDemo" /> </ intent-filter> </ receiver>
注意:在AndroidManifest文件中进行配置的广播会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发,即使程序未运行。
1.2 动态注册
// 动态注册广播 BroadcastReceiver broadcastReceiver = new BroadcastReceiver(); Activity.registerReceiver(broadcastReceiver, new IntentFilter()); // 动态取消广播 unregisterReceiver(broadcastReceiver);
注意:动态注册的需要在Activity onDestory方法中进行取消注册,否则会抛出异常
2. 两种广播的发送方式
2.1 无序广播
意思是是针对多个符合条件的广播的接收顺序不确定的,发送代码如下:Intent intent = new Intent(action); sendBroadcast(intent);
优点:异步发送效率高
缺点:无法将结果传递给下一个处理者并且终止广播
2.2 有序广播
意思是是针对多个符合条件的广播的接收顺序确定的,并且有先后顺序,发送代码如下Intent intentOrderBroadcast = new Intent(action); sendOrderedBroadcast(intentOrderBroadcast, null);
1. 可以终止广播(BroadcastReceiver.abortBroadcast ()),一旦终止后续不会再接收到广播。
2. 传递数据
优先级高的可以通过setResultExtras ( Bundle) 放置数据。
优先级低的可以通过 Bundle bundle = getResultExtras ( true ) 获取数据。
3 有序广播的接收
在AndroidMainfast.xml中配置receiver的属性android:priority="number" ,范围区间是-1000 ~ 1000 ,设置的数值越大越接收到广播4. 注册接收系统广播
可以配置Android提供的Action,更多信息可以参考:
Android 文档Intent类 - Standard Broadcast Actions
http://developer.android.com/reference/android/content/Intent.html
三、启动与关闭
关闭后续无法接收到广播BroadcastReceiver.abortBroadcast();;四、注意
1. 广播安全问题
在android-support-v4.jar包中提供一个LocalBroadcastManager类,顾名思义是用于应用内进行通信的。不会接收应用外的广播,提高应用内通信的安全性。
2. 避免ANR
广播执行如果超过10秒会出现ANR,接收后的处理操作如果操作这个时间限制最好放到子线程中执行相关文章推荐
- Android中去掉标题的方法总结
- android常见异常总结
- 每周总结20130814——Android NDK环境的搭建和使用,YUV420SP格式图像的处理
- Android studio 使用Gradle发布Android开源项目到JCenter 总结
- android 网络连接总结
- android总结------ListView
- 【转】android4.1.2 CTS测试总结
- Android TV开发总结(一)
- Android程序对不同手机屏幕分辨率自适应的总结
- Android总结 - 保存数据
- android 5.0和6.0后新增的控件总结
- Android 混淆代码问题总结
- android Theme level 11 使用总结
- android Bitmap用法总结
- android WebView总结
- android5.1 AlarmManagerService的学习总结(未完)
- Android Building System 总结
- android内核编译,终于ok了,总结之
- android面试总结(1)
- Android开发工具总结