复习Android之Broadcast Receiver

  1. 广播有几种形式?分别有什么特点?
    Android广播的定义:无序广播 和 有序广播
    无序广播:通过sendBroadcast()方法来发送,异步操作。
    特点:所有的receivers接收broadcast的顺序都不确定,效率高。
    有序广播:通过sendOrderedBroadcast来发送,所有的receiver依次执行。
    特点:从优先级最高的广播接收器开始接收,如果优先级相同,谁先注册,就可以优先接收到广播。

  2. 广播的两种注册形式?
    Android广播的注册形式分为:常驻型广播(静态注册) 和 非常驻型广播(动态注册)
    常驻型广播:当应用程序关闭了,有广播信息来,广播接收器同样的能接收到;它的注册方式是在应用程序的AndroidManifast.xml 中进行注册。

    <!--广播注册、name里面填写广播类的路径 priority是广播的优先级-->
    <receiver android:name=".SmsBroadCastReceiver">
         <intent-filter android:priority="60">
              <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
         </intent-filter>
    </receiver>
    

    优点:常驻型,不受应用生命周期的影响。
    缺点:耗费cpu、电量等资源。

    非常驻型广播:理解为通过代码动态注册的和注册者关联的。例如:在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。

    //定义消息广播
    class SmsReceiver extends BroadcastReceiver{
      @Override
      public void onReceive(Context context, Intent intent) {
      //doSomething
      }
    }
    
    //在onCreate 或者 onResume注册广播
    private SmsReceiver smsReceiver=new SmsReceiver();
    IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(smsReceiver,intentFilter);
    
    //发送广播
    Intent intent=new Intent();
    intent.setAction("android.provider.Telephony.SMS_RECEIVED");
    sendBroadcast(intent);
    
    //销毁广播
    unregisterReceiver(smsReceiver);
    

    优点:不占用资源,在Android的广播机制中,动态注册的优先级高于静态注册的优先级,因此在必要 情况下,我们需要动态注册广播接收器。
    缺点:跟生命周期绑定,程序退出,广播就会注销,就会无法进行广播监听。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值