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

Android四大组件之Broadcast Receiver(广播)

2017-03-28 11:28 716 查看
请描述一下BroadcastReceiver

BroadCastReceiver是Android四大组件之一,主要用于接收系统或者app发送的广播事件。

广播分为两种:有序/无序广播

内部通信实现的机制:通过Android系统的Binder机制实现通信。

无序广播:完全异步,逻辑上可以被任何的广播接受者收到,优点是效率高,缺点是一个接收者不能将处理的结果传递给下一个接受者,并无法终止广播intent的传播。

有序广播:按照被接受者的优先级顺序,在被接受者中依次传播,比如有三个广播接受者A,B,C,优先级别是A>B>C,那么消息先传给A,然后在传给B,最后传给C,每个接受者有权终止广播,比如B终止广播,C就无法接收到,此外A接收到的广播后可以对结果对象进行操作,当广播传给B时,B可以从结果对象中取得A存入的数据;

在通过Context.sendOrderedBroadcast(intent,receviePermission,resultReceiver,scheduler,initialCode,initialData,initialExtras)时我们指定resultReceiver广播接收者,这个接收者我们可以认为是最终的接收者,通常情况下如果比他们的优先级更高的接收者如果没有终止广播,那么他的onReceive会被执行两次,第一次是正常的按照优先级顺序执行,第二次是作为最终接收者接收,如果比他优先级高的接收者终止了广播,那么他依然能接收到广播。

项目中常使用广播接收者接收系统通知,比如开机启动,sd挂载,低电量,锁屏等。

在manifest和代码中如何注册和使用Broadcast Receiver

在清单文件中注册广播接收者称为静态注册,在代码中注册称为动态注册。静态注册的广播接收者只要app在系统中运行则一直可以接收到广播消息,动态注册的广播接收者当注册的Activity或Service销毁了那么就接收不到广播了。

静态注册:在清单文件中进行配置
<receiver android:name =".BroadcastReceiver"
<intent-filter>
<action android:name="android.intnet.action.CALL">
</action>
</intent-filter>
</receiver>

动态注册:在代码中注册

receiver = new BroadcastReceiver();

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(CALL_ACTION);

context.registerReceiver(receiver,intentFilter);

BroadcastReceiver的生命周期

广播接受者的生命周期非常短暂,在接收广播的时候创建,onReceive()方法结束之后销毁;

广播接受者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框;

最好也不要再广播接收者中创建子线程做耗时的操作,因为广播接受者被销毁后进程就成为了空进程,很容易被系统杀掉;

耗时的,较长的工作最好放在服务中完成;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Aandroid基础 android