Broadcast --- 广播机制

本篇根据郭大神的《第一行代码》而来, 建议初学者买本看看.

一.广播的类型

  1. 标准广播
  2. 有序广播
区别
标准广播异步无序无法截断
有序广播同步有序可截断

二.广播接收器的注册方式

  1. 在代码中注册 (又称动态注册)

    1. 定义内部类,继承BroadcastReceiver,并重写onReceiver();当接收到广播时onReceiver()方法会被调用.
    2. 创建过滤器(IntentFilter)实例,并调用addAction(String actionName)方法设置action属性;actionName可以是任意字符串.
    3. 调用Context.registerReceiver(BroadcastReceiver receiver, IntentFilter intentFilter);
  2. 在AndroidManifest.xml文件中注册 (又称静态注册)

    1. 定义内部类,继承BroadcastReceiver,并重写onReceiver();当接收到广播时onReceiver()方法会被调用.
    2. 在AndroidManifest.xml文件中注册广播和拦截器
<receiver android:name=".BootCompleteReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

两种注册方式的优点和缺点:动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()方法中的。而静态注册的方式可以让程序在未启动的情况下就能接收到广播。

三.发送广播

  1. 发送标准广播
    sendBroadcast(Intent intentName);
  2. 发送有序广播
    sendOrderedBroadcast(Intent intent, String receiverPermission);

  3. 设定广播接收器的先后顺序
    在广播注册的时候设定过滤器的android:priority属性设置广播接收器的优先级,优先级比较高的广播接收器可以先收到广播

  4. 广播截断
    在onReceiver()方法中调用abortBroadcast();方法可以终止广播传递

四.发送本地广播 (LocalBroadcastManager)

  1. 什么是本地广播?
    之前发送的都是属于系统全局广播,即发出的广播可以被其他任何应用程序接收到;这样广播中的数据有可能被其他程序截获.为了能够解决广播的安全性问题.Android引用了一套本地广播机制.
    本地广播和标准广播的区别就是本地广播的操作都是调用LocalBroadcastManager中的方法,而标准广播是调用的Context中的方法.

  2. 注册本地广播

//获取LocalBroadcastManager实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
// 广播过滤器
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
// 广播接收者
localReceiver = new LocalReceiver();
// 注册本地广播监听器 
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
  1. 发送本地广播
// 发送本地广播 
localBroadcastManager.sendBroadcast(intent); 
  1. 销毁本地广播
// 本地广播销毁
localBroadcastManager.unregisterReceiver(localReceiver);

注意:
广播注册后记得调用Context.unregisterReceiver(BroadcastReceiver receiver)取消广播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值