初学Android BroadcastReceiver之有序广播 七十一

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
               

Broadcast分为两种广播,普通广播,是异步的,可以在同一时刻被所有接收者收到,消息传递效率比较高,但缺点是接收者不能将结果传递给下一个接收者,且无法终止Broadcast Intent的传播

有序广播的接收者则将按预先声明的优先级依次接收Broadcast.如A高于B,了高于C,那么执行顺序为A到B到C.优先级声明在<intent-filter.../>元素的android:priority属性中,数字越大优先级越高.取值范围为-1000~1000,先可以在代码中调用IntentFilter对象的setPriority()进行设置.

发送有序广播的方法为sendOrderedBroadcast()

优先接收到Broadcast的接收者可以通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接收者,

下一个接收者通过Bundle bundle = new getResultExtras(true)可以获取上一个接收者存入的数据

下面是一个例子,共定义了两个receiver

package WangLi.Service.SortedBroadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;public class MyReceiver extends BroadcastReceiver @Override public void onReceive(Context context, Intent intent) {  Toast.makeText(    context,    "接收到的Intent的Action为:" + intent.getAction() + "\n消息内容是:"      + intent.getStringExtra("msg"), 5000).show();  //创建一个Bundle对象,并存入数据  Bundle bundle = new Bundle();  bundle.putString("first", "第一个BroadcastReceiver存入的消息");  //将bundle放入结果中  setResultExtras(bundle);  //取消Broadcast的继续发送  abortBroadcast(); }}

package WangLi.Service.SortedBroadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;public class MyReceiver2 extends BroadcastReceiver @Override public void onReceive(Context context, Intent intent) {  Bundle bundle = getResultExtras(true);  //解析前一个BroadcastReceiver所存入的key为first的消息  String first = bundle.getString("first");  Toast.makeText(context,"第一个Broadcast存入的消息为:" + first, 5000).show(); }}

配置两个receiver的优先级

        <receiver android:name="MyReceiver" >            <intent-filter android:priority="20">                <action android:name="WangLi.Test.OrderBroadcast" />            </intent-filter>        </receiver>        <receiver android:name="MyReceiver2" >            <intent-filter android:priority="0">                <action android:name="WangLi.Test.OrderBroadcast" />            </intent-filter>        </receiver>
一个是20,一个是0,显然是先执行优先级为20的那个接收者

注意MyReceiver里的取消Broadcast继续发送的代码

abortBroadcast();

如果注释它,那么MyReceiver2 也会得到执行,即按顺序,先出现画面1,再出现画面2

画面1


画面2


如果不注释掉这行代码,那么执行中只会运行MyReceiver,没有MyReceiver2,所以只会出现画面1

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

从零开始学Android广播:饭堂广播案例详解(含常见问题解决方案) 本文通过生动的'饭堂广播'案例,详细讲解Android广播机制的核心概念与实战应用,包括系统广播与自定义广播的区别、接收者注册方式、有序广播处理等。针对Android开发中常见的广播接收问题,提供了实用的解决方案和高级应用技巧,帮助开发者快速掌握Android移动开发中的广播通信技术。 阅读详情

相关推荐

Android BroadcastReceiver实例Demo(有序广播的发送)

上一次介绍了Android BroadcastReceiver广播发送,这一次主要介绍有序广播的发送。

初学Android,BroadcastReceiver有序广播(七十一)

Broadcast分为两种广播,普通广播,是异步的,可以在同一时刻被所有接收者收到,消息传递效率比较高,但缺点是接收者不能将结果传递给下一个接收者,且无法终止Broadcast Intent的传播有序广播的接收者则将按预先声明的优先级依次接收Broadcast.如A高于B,了高于C,那么执行顺序为A到B到C.优先级声明在元素的android:priority属性中,数字越大优先级越高.取值范围为-

lee576的专栏 5699

Android四大组件——BroadcastReceiver普通广播有序广播、拦截广播、本地广播、Sticky广播、系统广播

Android四大组件——BroadcastReceiver普通广播有序广播、拦截广播、本地广播、Sticky广播、系统广播

Android组件- 广播的静态动态有序无序与优先级

BroadcastReceiver.onReceive默认是在主线程(UI线程)执行的,这也是老生常谈的“千万不能在广播接收器做耗时操作,会ANR!”的真正原因

Android.安卓 2367

安卓广播机制讲解(标准广播有序广播)

安卓广播机制讲解 广播分为标准广播有序广播 标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。标准广播的工作流程如图所示。 有序广播(Ordered broadcasts )则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时

天行健 君子以自强不息,地势坤 君子以厚德载物。 5114

发送有序广播案例

包com.edu.bzu.broadcast; 导入android.content.BroadcastReceiver; 导入android.content.Context; import android.content.Intent; 导入android.util.Log; / ** *由dpl在2017/6/4 0004创建。 * / public class MyBroadcast

dpl12的博客 1068

发送有序广播

Android系统中,提供两种广播类型,有序广播和无序广播。 以下程序是根据有序广播编写的发送有序广播。   有序广播:按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕,才会继续传递。   有序广播的特点,如下图所示:            1.  编写用户交互界面    a. 代码如下所示: xml version

lucky_yan99的博客 577

初学Android BroadcastReceiver之发送接收广播 七十

初学Android BroadcastReceiver之发送接收广播 七十

hffyyff的博客 447

Android初学四之使用Service服务和BroadcastReceiver广播组件实现音乐播放器的设计

(1)使用Service服务来注册音乐服务; (2)利用BroadcastReceiver广播组件来启动音乐播放。

雨落i的博客 9003

AndroidBroadcastReceiver的使用

由于初学,了解的还不是很全面,写一点,记录下来 1.标准广播 1.1 接收广播 比如系统网络改变会发送一条action为“android.net.conn.CONNECTIVITY_CHANGE”的广播 那么活动中如何去接收这条广播呢 1.1.1动态广播注册 自定义广播接收器继承BroadcastReceiver重新onReceive()方法 public class Networkchan...

HughZhao的博客 205

Android移动应用开发:广播机制(BroadcastReceiver)简单示例

本文介绍了一个简单的Android示例,旨在帮助初学者理解广播接收器(BroadcastReceiver)的使用方法。示例包含两个按钮,分别用于发送包含城市信息和美食信息的自定义广播。通过MainActivity.java和MyReceiver.java的代码实现,展示了如何注册广播接收器、发送广播以及接收并处理广播内容。运行程序后,点击按钮会在日志中显示相应的广播信息。该示例代码清晰、功能简单,适合初学者入门学习Android广播通信机制。

2402_84971234的博客 908

初学Android,BroadcastReceiver之发送接收广播(七十)

BroadcastReceiver用于监听系统全局广播消息,由于BroadcastReceiver是一种全局的监听器,因此它可以非常方便地实现系统中不同组件之间通信启动它需要两步1.创建需要启动的BroadcastReceiver的Intent2.调用Context的SendBroadcast或sendOrederedBroadcast方法来启动指定的BroadcastReceiver这其中关键是

lee576的专栏 5169

Android Studio初学者实例:广播

本章先不进行详细讲解,后续补充,如有问题请在评论区打出来~~~共有两个实例:饭堂开饭与数鸭子。对应的逻辑java代码。对应的逻辑Java代码。

林大大的博客 3928

broadcastreceiver广播

广播本质上就是一个全局的监听器 广播有静态跟动态两种 动态注册是在Java类中注册,而静态注册是在AndroidManifest.xml中注册。 动态广播会随着所注册的Activity的消失而跟着消失,而静态广播即使APP被关闭了,也是可以接收到广播的。 静态广播 1.新建一个类,继承自BroadcastReceiver,并重写onReceive()方法并在里面接收消息 2.新建完后在Andr...

weixin_44931166的博客 178

初学Android,BroadcastReceiver之发送接收广播

BroadcastReceiver用于监听系统全局广播消息,由于BroadcastReceiver是一种全局的监听器,因此它可以非常方便地实现系统中不同组件之间通信 启动它需要两步 1.创建需要启动的BroadcastReceiver的Intent 2.调用Context的SendBroadcast或sendOrederedBroadcast方法来启动指定的BroadcastRec...

weixin_30781107的博客 208

android初学者_适用于初学者的Android广播接收器

android初学者Let’s say you have an application that depends on a steady internet connection. You want your application to get notified when the internet connection changes. How do you do that? 假设您有一个依赖稳定...

cumi7754的博客 279

Android食堂广播系统实战:从界面搭建到广播接收全解析

本文通过一个生动的“食堂广播系统”实战项目,详细解析了Android广播机制的核心应用。从界面搭建、广播发送到动态注册接收,手把手教你掌握Android移动开发中组件间通信的关键技术,适合初学者快速理解并实践广播接收与UI交互的完整流程。

ww90123的博客 149

初学Android广播机制学习小结

第二篇博客(学习android总结的第二篇) 学习Android的第一本书是郭霖大神的《第一行代码Android》第二版,根据自己对这本书的理解,在总结上会有一些对这本书内容上的借鉴。 本着总结学习成果的方面去考虑,希望自己能够有所进步 之后写的“书中”均指的是《第一行代码Android》第二版

lonelyshop的博客 382

Android开机自启动实现:从BOOT_COMPLETED广播到WorkManager的兼容方案

Android应用开发中,后台任务管理与系统事件响应是构建稳定应用的基础能力。BroadcastReceiver作为Android四大组件之一,通过订阅-发布机制实现了应用与系统间的松耦合通信,其静态注册方式允许应用在未启动时接收系统广播。随着Android系统版本迭代,后台限制策略不断收紧,从Android 8.0开始对后台服务执行严格管控,这推动了JobScheduler等智能调度框架的普及。WorkManager作为Jetpack组件,封装了JobScheduler、GcmNetworkManage

weixin_33924220的博客 591
上一篇: jquery validate js 验证例子
下一篇: 基于DDD的开发框架Apworks
为什么没有人加
博客等级 码龄8年 55粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值