广播接收者Broadcast Receiver

Broadcast 广播


用于在系统间传递消息的一个机制

广播的分类

普通广播的特点

  1. 同级别接收先后是随机的(无序)
  2. 级别低的后收到广播
  3. 接收器不能截断广播的继续传播也不能处理广播
  4. 同级别动态注册高于静态注册

有序广播的特点

  1. 同级别接收顺序是随机的
  2. 能截断广播的继续传递,高级别的广播接收器收到广播后可以决定是否截断该广播
  3. 接收器能截断广播,也可以处理广播
  4. 同级别动态注册高于静态注册

异步广播

  • 不能将处理结果传递给下一个接收者,无法终止该广播

发送广播

  • 广播的发送是通过Intent来实现的。Intent可以在进程之间发送结构化消息。
  • 把信息装入一个Intent对象
  • 通过调用相应的方法将Intent对象以广播的形式发送出去
  • sendBroadcast() 发送一条普通广播
  • sendOrderBroadcast() 发送一条有序广播
  • sendStickyBroadcast() 发送一条异步广播

可以对Intent的动作、数据和分类进行设置,从而使BroadcastReceiver能够精确找到他们的需求。
Intent的动作字符串用来标识要广播的事件,所以它应该是唯一的,一般使用与Java包名相同的构建方法

Intent intent = new Intent();
intent.setAction("de.vogella.android.mybroadcast");
intent.putExtra(tag,msg);//Extras用于传递参数
sendBroadcast(intent);

Broadcast Receiver 广播接收者


用于接收发送出来的广播中的消息

BroadcastReceiver的生命周期只有10秒
在BraodcastReceiver里不能进行耗时操作,也不能使用子线程,
应该将消息传递给Service,由Service来完成,BroadcastReceiver在此只作为一个接收者,

接收广播

当intent发送以后,所有注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadReceiver的onReceive()方法。


当一个接收器与在注册接收器时使用的IntentFilter相匹配的Braodcast Intent的时候,会执行onReceive方法。onReceive处理程序必须在5秒钟内完成,否则会显示Force Close对话框

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
    // 取出intent中的Extra数据
    String message = intent.getStringExtra("message");
    Log.d("receiver", "Got message: " + message);
    }
};

注册广播接收者

静态注册

//第一个name:要注册的BroadReceiver的类名
//第二个name:指定要监听的动作字符串
<receiver android:name="MyReceiver" >
        <intent-filter>
            <action android:name="de.vogella.android.mybroadcast" />
        </intent-filter>
    </receiver>

动态注册

影响特定Activity的UI的BraodcastReceiver通常在代码中动态注册。在代码中注册的接收器只会在包含它的应用程序组件时响应Broadcast Intent。

通常在onResume处理程序中注册接收器,并在onPause()中注销它

@Override
public void onResume() {
super.onResume();
//第一个参数:要注册的BroadReceiver的类名
//第二个参数:指定要监听的动作字符串
registerReceiver(mMessageReceiver,
    new IntentFilter("my-event"));
}
@Override
protected void onPause() {
unregisterReceiver(mMessageReceiver);//注销BraodcastReceiver                                       
super.onPause();
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值