零、前言

先讲个场景小故事:
从前,有个小男孩捡到一颗漂亮的石头,他想去卖,价格1元。
男孩(Boy)大喊:"我有一个漂亮的石头,只卖1元",一个石匠买了这个石头。
石匠(Stonemason)大喊:"我有一个漂亮的石头,只卖1000元。"一个雕刻家买了这个石头。
雕刻家(Graver)大喊:"我有一个漂亮的石头,只卖10w元。"一个宝石家买了这个石头。
宝石家(RubyMan)大喊:"我有一个漂亮的石头,只卖1000w元。"收藏家买了这个石头。
收藏家(Collector)不喊了,静静地收藏起来。男孩用一元买了一个棒棒糖,开心地吃着。故事结束。按照这个顺序,只要某个人不喊了,任何一个环节都可以被打断,而导致石头的价格出现差异。这就是有序广播的作用。
有序广播.gif

二、广播接收者代码实现

1.男孩广播接收者:BR1_Boy.java
public class BR1_Boy extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到发送广播携带的数据String content = getResultData();//[2]展示到Toast上Toast.makeText(context, "男孩:" + content, Toast.LENGTH_LONG).show();
//      [2.1]终止广播
//      abortBroadcast();//[3]传递数据setResultData("我有一个漂亮的石头,只卖1000元");}
}
2.石匠广播接收者:BR2_Stonemason.java
public class BR2_Stonemason extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到发送广播携带的数据String content = getResultData();//[2]展示到Toast上Toast.makeText(context, "石匠:" + content, Toast.LENGTH_LONG).show();
//      [2.1]终止广播
//      abortBroadcast();//[3]传递数据setResultData("我有一个漂亮的石头,只卖10W元");}
}
3.雕刻家广播接收者:BR3_Graver.java
public class BR3_Graver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到发送广播携带的数据String content = getResultData();//[2]展示到Toast上Toast.makeText(context, "雕刻家:" + content, Toast.LENGTH_LONG).show();
//      [2.1]终止广播
//      abortBroadcast();//[3]传递数据setResultData("我有一个漂亮的石头,只卖1000W元");}
}
4.宝石家广播接收者:BR4_RubyMan.java
public class BR4_RubyMan extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到发送广播携带的数据String content = getResultData();//[2]展示到Toast上Toast.makeText(context, "宝石家:" + content, Toast.LENGTH_LONG).show();
//      [2.1]终止广播
//      abortBroadcast();//[3]传递数据setResultData("我有一个漂亮的石头,价值1000W元");}
}
5.收藏家广播接收者:BR5_Collector.java
/*** 最终的receiver 不需要再清单文件里面配置*/
public class BR5_Collector extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String content = getResultData();Toast.makeText(context, "收藏家:" + content, Toast.LENGTH_LONG).show();}
}
6.记得注册:app/src/main/AndroidManifest.xml
<receiver android:name=".stone.BR1_Boy"></receiver>
<receiver android:name=".stone.BR2_Stonemason"></receiver>
<receiver android:name=".stone.BR3_Graver"></receiver>
<receiver android:name=".stone.BR4_RubyMan"></receiver>

三、测试代码实现:传播顺序按照注册顺序

1.StoneStoryActivity.java
public class StoneStoryActivity extends AppCompatActivity {@BindView(R.id.id_btn_send)Button mIdBtnSend;@BindView(R.id.id_btn_reg)Button mIdBtnReg;private BR1_Boy mBr1_boy;private BR2_Stonemason mBr2_stonemason;private BR3_Graver mBr3_graver;private BR4_RubyMan mBr4_rubyMan;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_story);ButterKnife.bind(this);}@OnClick({R.id.id_btn_send, R.id.id_btn_reg})public void onViewClicked(View view) {switch (view.getId()) {case R.id.id_btn_send:Intent intent_order = new Intent();intent_order.setAction("www.toly1994.com");sendOrderedBroadcast(intent_order, null,new BR5_Collector(), null, 1, "我有一个漂亮的石头,只卖1元", null);break;case R.id.id_btn_reg://动态注册所有IntentFilter filter = new IntentFilter();filter.addAction("www.toly1994.com");mBr1_boy = new BR1_Boy();mBr2_stonemason = new BR2_Stonemason();mBr3_graver = new BR3_Graver();mBr4_rubyMan = new BR4_RubyMan();registerReceiver(mBr1_boy, filter);registerReceiver(mBr2_stonemason, filter);registerReceiver(mBr3_graver, filter);registerReceiver(mBr4_rubyMan, filter);break;}}
}
有序广播.png
2.如果石匠截断,不喊了,直接卖给收藏家
public class BR2_Stonemason extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//[1]获取到发送广播携带的数据String content = getResultData();//[2]展示到Toast上Toast.makeText(context, "石匠:" + content, Toast.LENGTH_LONG).show();
//      [2.1]终止广播abortBroadcast();//[3]传递数据setResultData("我有一个漂亮的石头,价值1000元");}
}
附录、activity_story.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".StoneStoryActivity"><Buttonandroid:id="@+id/id_btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginTop="8dp"android:text="发送广播"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/><Buttonandroid:id="@+id/id_btn_reg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="20dp"android:layout_marginTop="8dp"android:text="注册所有广播"app:layout_constraintBottom_toBottomOf="@+id/id_btn_send"app:layout_constraintStart_toEndOf="@+id/id_btn_send"app:layout_constraintTop_toTopOf="@+id/id_btn_send"app:layout_constraintVertical_bias="1.0"/>
</android.support.constraint.ConstraintLayout>

后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正

[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg

2-AII--BroadcastReceiver有序广播相关推荐

  1. android 51 有序广播

    无序广播:一条广播发送出去,多个接收者接收没有顺序. 有序广播:广播接收者可以设置优先级,优先级高的先收到广播. 有序广播可以设置优先级. mainActivity.java package com. ...

  2. 17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

     1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播( ...

  3. Android 第二十课 广播机制(大喇叭)----发送自定义广播(包括发送标准广播和发送有序广播)

    广播分为两种类型:标准广播和有序广播 我们来看一下具体这两者的具体区别: 1.发送标准广播 我们需要先定义一个广播接收器来准备接收此广播才行,否则也是白发. 新建一个MyBroadcastReceiv ...

  4. android广播代码汇总二__有序广播

    分析 普通广播(Normal Broadcast): 一,优缺点:和有序广播的优缺点相反! 二,发送广播的方法:sendBroadcast() 有序广播(Ordered Broadcast): 一,优 ...

  5. android 有序广播例子,有序广播的实例解析--android案例《拦截有序广播》

    有序广播: 使用有序广关健处在于定义接收者的优先权,以下代码中有三个类接收广播, 案例<拦截有序广播> 1.布局文件 上述布局文件,定义了一个button按钮,并且为按钮注册了一个oncl ...

  6. 发送有序广播,只能运行在8.0之前的系统中

    一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件.例如,收到一条短信就会 ...

  7. 有序广播Ordered broadcasts的使用

    给多个接受者发送广播 logcat中显示: MainActivity.java中注册button,添加过滤器. 发送信息用putExtra. 定义广播声明一个类Broadcast1.java,Broa ...

  8. Broadcast(广播)和BroadcastReceiver(广播接收器)

    目录(?)[-] BroadcastReceiver简介 BroadcastReceiver生命周期 注册BroadcastReceiver 静态注册 动态注册 发送Broadcast 同步广播Con ...

  9. Android8.0后静态广播以及有序广播的使用

    Android8.0后静态广播以及有序广播的使用 我们都知道,8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,Android8.0后正常静态注册的广播都没有用了,现 ...

最新文章

  1. 一套外企的数据库设计面试题
  2. Java开源搜索引擎
  3. android纯白背景加灰,Android背景颜色设置为灰色而不是@android:颜色/白色
  4. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1094:与7无关的数
  5. Flutter入门:如何只关闭自身页面
  6. 蓝桥杯2017初赛-油漆面积-枚举
  7. mmdetection 使用笔记 01: 安装与简单的推理demo
  8. hadoop 实战练习_hadoop实战(二)
  9. Redis学习总结(15)——Redis 基本数据类型使用场景
  10. JUnit5 @AfterEach注解示例
  11. JAVA转smali软件_Java2Smali(Java代码转Smali工具)
  12. Java代码:调用外部接口(使用Json格式传递参数)的方法
  13. windows命令 笔记
  14. java时区时间转换
  15. 【BSP视频教程】STM32H7视频教程第4期:从启动到运行过程全解析,电源域,复位,时钟,软硬件启动流程到堆栈,map和htm文件分析(2022-01-26)
  16. toupper在c语言中是什么意思,C语言中toupper 是什么?
  17. 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享
  18. 墨迹天气总显示内部服务器更新,墨迹天气常见问题之无法更新版本的解决
  19. Mac的终端下安装pip
  20. 仿新浪微博项目需求,及数据库建设

热门文章

  1. 春运渡劫?Python帮你12306抢回家的火车票
  2. Hotel California
  3. 计算机科学基础知识(六)理解栈帧
  4. 网站前端和后台性能优化18
  5. CEO换人、IPO延期,比特大陆艰难转型路漫漫
  6. 阿里巴巴测试环境稳定性提升实践
  7. 38.6. Web IRC
  8. 阻塞与非阻塞的IO网络读写
  9. List(JDK1.7)(1)
  10. com.sun.crypto.provider.SunJCE