BroadcastReceiver

BroadcastReceiver配置
//配置receiver的action匹配项,对应的activity类名(在activity中配置)
<activity>
    <receiver andorid:name=".ReceiverClassName">
        <intent-filter>
            <action...../>
        </intent-filter>
    </receiver>
</activity>



BroadcastReceiver的执行
  • 在广播消息到达时,系统会创建一个新的BroadcastRceiver实例并执行onReceive()方法处理广播响应,当处理完成后实例就会被销毁
  • 在onReceive()中如果处理时间超过5秒会产生ANR(Application not response)的错误
  • 在onReceive()中不能处理耗时的操作,如果需要进行耗时操作时,必须使用service,不可以使用子线程。这是由于使用子线程的话,onRecive()的处理时间很短,当创建子线程处理时,主线程已经处理被销毁,该子线程所在的进程即成为了空进程;当系统需要回收内存空间时,优先回收空进程,因此子线程可能无法完成就会被回收,这是不可靠的

发送广播

  • sendBroadcast(),发送Normal Broadcast,完全异步,可以在同一时刻被所有接收者接收到传递效率高
  • sendOrderedBroadcast(),发送Orderred Broadcast,按优先及依次接收广播并处理,可以将处理的结果传递给下一个接收者处理,效率比较低
//使用OrderedBroadcast优先接收的接收者可以终止广播的传递,使后面的接收者不再接收到该广播(拦截)
//优先接收的接收者可以通过setResultExtras(Bundle)将处理结果存入broadcast传递给下一个接收者
//重写接收者onReceive()方法
public void onReceive(Context context, Intent intent){
    //传递新数据
    Bundle data=new Bundle();
    data.putString("key","vaule");
    setResultExtras(data);
    //取消broadcast传播
    //abortBroadcast();
}



  • 配置优先级
//在activity中注册的receiver中配置
<activity>
    <!--注册receiver,指定该组件的类名-->
    <receiver android:name=".ReceiverClassName">
        <!--设置receiver的优先级,-1000到1000之间的值,值越大,优先级越高-->
        <intent-filter android:priority="1000">
            <!--设置receiver对应的action,用于匹配并启动receiver-->
            <action.../>
        </intent-filter>
    </reciver>
</activity>



  • 部分系统广播在发送时已经指定了必须接收的broadcastReceiver,此时终止广播并不能阻止该receiver接收到广播(如拨号程序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值