九.Android的BroadCastReceiver详解

1.BroadCastReceiver概述

  • 说起这个组件,就不得不提到广播了。广播是应用程序之间传输信息的机制。是为了方便数据的通信,例如监听一些广播,如来电、来短信等。
  • 广播的流程:发送—>接收。* 一个发送,多个接收。*
    如图
    broadcast

2 流程

2.1 发送

普通广播、有序广播

广播分类发送方法
普通广播Context.sendBroadcast()
有序广播Context.sendOrderedBroadcast()
  • 普通广播有以下特性:
    1. 它是完全异步的。
    2. 所有的receivers接收器的执行顺序不确定。因此,所有的receivers接收器接收broadcast的顺序不确定。
    3. 这种方式效率更高!
      代码如下:
Intent intent = new Intent(“com.app.bc.test”);  
sendBroadcast(intent);//发送广播事件  
  • 有序广播有以下特性:
    1. BroadcastReceiver可以使用setResult系列函数来结果传给下一个 BroadcastReceiver,通过getResult系列函数来取得上个BroadcastReceiver返回的结果,并可以abort系列函数来让系统丢弃该广播让,使用该广播不再传送到别的BroadcastReceiver。
    2. BroadcastReceiver拥有优先级属性,即android:priority=”100”,取值范围为1000~-1000,数值越大,优先级别就越高。
Intent intent = new Intent(“com.app.bc.test”);  
sendOrderedBroadcast(intent,null);//发送广播事件  

2.2 接收

  • 接收:BroadcastReceiver,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive()方法生命周期只有10秒,即不要在这里执行太长的任务。(这里确确实实是10秒,我专门翻墙看了官方文档0.0)
class MyBroadcastReceiver extends BroadcastReceiver {  
     //接收到广播会被自动调用    
    @Override  
    public void onReceive (Context context, Intent intent) {  
        //从Intent中获取action  
        …your code here…  
    }  
}  

3 注册与过滤器

  • 注册:正如Activity使用一样,broadcast同样需要注册。
  • 过滤器:不可能所有的广播都要接收,所以便有了过滤器,区别所有的广播的就是aciton了,有官方和自定义的。

静态注册、动态注册

  • 静态注册:在AndroidManifest.xml注册。因为它是四大组件之一,所以它的位置和Activity同级。
<application>  
    <activity name=""/>  
    <receiver android:name=".MyBroadcastReceiver">  
        <!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->   
        <intent-filter>  
            <action android:name="com.app.bc.test"/>  <!--action作为过滤的唯一判定标准-->
        </intent-filter>  
    </receiver>  
</application>  
  • 动态注册:
SMSReceiver  smsReceiver = new SMSReceiver();  
IntentFilter filter = new IntentFilter();         //新建一个intent过滤器
filter.addAction(“android.provider.Telephony.SMS_RECEIVED”);  //加入action
TestBC1Activity.this.registerReceiver(smsReceiver, filter);   //注册
  • 区别
    1. 静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
    2. 动态注册:在代码中通过registerReceiver()手工注册。当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。

4.总结

方法含义
sendBroadcast发送普通广播
sendOrderedBroadcast发送有序广播
onReceive接收广播后调用
intent-filter静态注册的过滤器
priority有序广播优先级
filter.addAction动态注册过滤器添加 action
registerReceiver动态注册
unregisterReceiver()手动销毁

5.日常福利

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值