美文网首页
BroadCast使用小记

BroadCast使用小记

作者: 苏简笔记 | 来源:发表于2016-08-14 19:01 被阅读68次

广播用于在应用程序间传播数据,是一种“发布-订阅模式”,也就是观察者模式。一个广播可以有任意多个接收者。特点在于只关心发送而并不关心接收者是否接收到数据、如何处理数据

组成元素:发送广播的BroadCast、接收广播的BroadCastReceiver、以及用于传递信息的Intent。

有以下几个分类

  • 普通广播
  • 有序广播
  • 本地广播
  • Sticky广播

普通广播

普通广播是异步的。通过Context的sendBroadCast()来发送。消息传递效率高,接收顺序不确定。无法终止广播的传递。

首先,定义广播接收器

Paste_Image.png

其次、进行注册

Paste_Image.png

最后-发送广播

Paste_Image.png

广播接收器可成功接收到广播。

另一种注册方式,在代码中实现动态注册。记得在

Paste_Image.png

两注册方式的不同点
1-在代码中动态注册的广播会随着依附的Activity的生命周期的结束而借宿。
2-XML注册的广播是常驻型的,不受生命周期的影响。即使APP关闭了,当有广播来的时候还是会被启动。

有序广播

通过Context.sendOrderBroadCast()来发送。广播接收器按照优先级依次执行。

Paste_Image.png

数值越大优先级越高。

优先级前的广播可以通过setResult()方法将结果传递给下一个广播,下一个广播可以通过getResult()方法获取上一个广播接收器返回的结果。

Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

在这里也可以设置初始的传递数据。


Paste_Image.png

可以使用abortBroadCast()方法来让系统飞起该广播,让他不再往下传递。

Paste_Image.png Paste_Image.png

可见广播不会再往下传递。

本地广播

21的support v4新增了本地广播,即LocalBroadcastManager。普通广播跟有序广播都是全局的,所有的应用都可以接收到。存在安全隐患。本地广播是只存在于应用内的广播。发送本地广播也无需通过系统去中转,效率会更高。

需要注意的一点是,本地广播无法通过静态注册来接收。

用法:

之前是用context去调用,sendBroadcast 、registerReceiver 、unregisterReceiver 现在改用** LocalBroadcastManager getInstance (Context context)**调这些方法。触发器和过滤器不用变。

注册
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, intentFilter);

取消注册
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);

发送异步广播
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(MyCastReceiver.ACTION));

发送同步广播
LocalBroadcastManager.getInstance(context).sendBroadcastSync(new Intent(MyCastReceiver.ACTION));

注意:注册和取消注册要放到OnResume和OnPause里。

Paste_Image.png

发送一个Sticky广播

通过sendStickyBroadCast()函数来发送。发送的广播会一直滞留。当有匹配此广播的广播接收者被注册后改广播接收器就会接收此条广播。发送Sticky广播时需要声明权限:

Paste_Image.png

sendStickyBroadCast()只保留最后一条广播,并且一直保留下去。及时已经有广播接收器处理了该广播当再有匹配的广播接收器被注册的时候,此广播仍然会被接收。

如果只想处理一遍该广播,可以通过context.removeStickyBroadcast(intent);来实现。

我们为什么要使用广播

  • 监听系统的状态
  • 自定义一些广播,提示消息更新等。

注意
不要在onReceive()中添加过多的逻辑或者执行任何耗时操作。在广播接收器中是不允许开启线程的。广播接收器更多扮演打开程序中其他组件的角色(比如启动Activity、发送通知或者开启Service等。)

在onReceiver中弹Dialog:

Paste_Image.png Paste_Image.png

相关文章

  • BroadCast使用小记

    广播用于在应用程序间传播数据,是一种“发布-订阅模式”,也就是观察者模式。一个广播可以有任意多个接收者。特点在于只...

  • Broadcast 使用

    http://www.cnblogs.com/playing/archive/2011/03/23/1992030...

  • broadCast

    broadCast 梳理 一 broadcast在主工程中使用 1 注册app Group, 生成 groupId...

  • spark broadcast

    为什么需要broadcast类型变量 ,它有哪些优点? spark中怎样创建和使用broadcast类型变量 ? ...

  • 深入理解相机五(硬件抽象层HAL)

    一、Android 基础学习 Activity 使用详解 Service 使用详解 Broadcast 使用详解 ...

  • spark中的广播变量broadcast

    Spark中的Broadcast处理首先先来看一看broadcast的使用代码: val values = Lis...

  • Spark - 图解 Broadcast 工作原理

    Broadcast 是 Spark 常用的特性,本文不打算介绍什么是 Broadcast 及如何使用它,只希望能以...

  • 浅谈Android Broadcast

    Android Broadcast Broadcast使用场景 Android广播分为两个方面:广播发送者和广播接...

  • Broadcast基本使用

    1. 基本概述 Broadcast就是应用间的全局大喇叭,即通信的一个手段。Android中每个应用程序都可以对自...

  • Broadcast 使用详解

    和你一起终身学习,这里是程序员 Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇...

网友评论

      本文标题:BroadCast使用小记

      本文链接:https://www.haomeiwen.com/subject/iibysttx.html