安卓四大组件之BroadCastReceiver
2017-05-13 本文已影响40人
watayouxiang
简介BroadCastReceiver
广播分为两种:无序广播,有序广播
在清单文件中注册广播称之为静态注册
<receiver android:name=".BroadcastReceiver1" >
<intent-filter>
<action android:name="android.intent.action.CALL" >
</action>
</intent-filter>
</receiver>
在代码中注册称之为动态注册
BroadcastReceiver receiver = new BroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(CALL_ACTION);
context.registerReceiver(receiver, intentFilter);
BroadCastReceiver的生命周期
- 广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁;
- 广播接收者中不要做一些耗时的工作,否则会弹出 Application No Response 错误对话框;
- 最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉;
- 耗时的较长的工作最好放在服务中完成;
如何让自己的广播只让指定的 app 接收
发送广播的应用A要在清单文件中注册自定义权限,假设自定义权限名叫com.test.android.permission
<permission android:name="com.test.android.permission"
android:protectionLevel="normal" />
<uses-permission android:name="com.test.android.permission"/>
接收广播的应用B要在清单文件中注册
<uses-permission android:name="com.test.android.permission"/>
或者:
<receiver android:name="com.itheima.android.broadcastReceiver.MyReceiver"
android:permission="com.test.android.permission">
<intent-filter >
<action android:name="com.test.mybroadcast"></action>
</intent-filter>
</receiver>
什么是最终广播接收者
ContextWrapper.sendOrderedBroadcast()
发送的有序广播
该广播会被执行两次,第一次是按顺序执行到的一次,第二次是作为final receiver必须接收的一次
广播的优先级对无序广播生效吗
生效的,广播的优先级范围是 [-1000, +1000],但设置的优先级范围超过这个范围也是可以的
动态注册广播优先级谁高
谁先注册谁优先级高
如何判断接收的是有序广播还是无序广播
在BroadcastRecevier类中的onReceiver方法中,可以调用 boolean b = isOrderedBroadcast();
判断