BroadCastReceive的理解和使用

Vue3 - H5实现省市区三四级联动组件,选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择,vue3实现省市区三级联动地址选择组件(支持接口数据懒加载,样式精美漂亮,附带详细示例源码) vue3实现省市区三级联动地址选择组件(附address文件),vue3实现省市区三级联动, 实现省、市、县地区三级联动功能,vue3省市区选择器,VUE3 h5如何实现省市区街道的四级联动选择,vue实现省市区选择联动,vue3城市三级联动(自定义组件)_VUE三级联动,插件省市区联动,vue如何实现省市区选择器,vue3怎样实现省市区地址三级联动,vue四级联动,vue3级联选择器,vue3实现选择省市区镇(街道)四级级联选择,包含三级级联选择,省市区街道三级四级联动选择器,VUE3自定义多列选择器省市 阅读详情

一、前言

今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低、开机、锁屏等一些操作都会发送一个广播。

二、广播机制

广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。

普通广播(Normal broadcasts):
普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;
有序广播(Ordered broadcasts):
有序广播是按照接收者声明的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000。也可以调用IntentFilter对象的setPriority()进行设置),被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C。A得到广播后,可以往广播里存入数据,当广播传给B时,B可以从广播中得到A存入的数据。
Context.sendBroadcast()
发送的是普通广播,所有订阅者都有机会获得并进行处理。
Context.sendOrderedBroadcast()
发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将处理结果存放进广播Intent,然后传给下一个接收者。

广播接收:
广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收,这个特性跟JMS中的Topic消息接收者类似。要实现一个广播接收者方法如下:
第一步:定义广播接收者,继承BroadcastReceiver,并重写onReceive()方法。

public class BroadCast extends BroadcastReceiver {
  @Override public void onReceive(Contextcontext, Intentintent) {
  }
}

第二步: 注册广播Intent,方法有两种:
第一种:使用代码进行订阅(动态注册)

IntentFilter filter = new IntentFilter("com.llay.admin.mydemo.sendMessage");
BroadCast receiver = new BroadCast ();
registerReceiver(receiver, filter);

第二种:在AndroidManifest.xml文件中的节点里进行订阅(静态注册)

<receiver android:name=".BroadCast">
   <intent-filter>
        <action android:name="com.llay.admin.mydemo.sendMessage"/>
   </intent-filter>
</receiver>

注意:

静态订阅广播又叫:常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到,他的注册方式就是在你的应用程序中的AndroidManifast.xml进行订阅的。
动态订阅广播又叫:非常驻型广播,当应用程序结束了,广播自然就没有了,比如你在activity中的onCreate或者onResume中订阅广播,同时你必须在onDestory或者onPause中取消广播订阅。不然会报异常,这样你的广播接收器就一个非常驻型的了。

三、代码的实现(使用Intent启动广播,可以显示启动,也可以隐示启动,这里显示启动忽略)

3、1 普通广播(Normal broadcasts)

(静态注册)
1、布局界面:
这里写图片描述

2、广播代码
NormalBroadCast.java文件,用来接收activity中发送的数据

public class NormalBroadCast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String s = intent.getStringExtra("xiaomi");
        Log.e("NormalBroadCast", s);
    }
}

3、activity中的代码

String s = editNormal.getText().toString();
//Intent intent = new Intent(BroadcastReceiverActivity.this, NormalBroadCast.class);//显示启用广播
Intent intent1 = new Intent("com.llay.admin.mydemo.sendMessage");
intent1.putExtra("xiaomi", s);
sendBroadcast(intent1);
break;

4、AndroidManifests.xml文件中静态注册该广播

<receiver android:name="com.llay.admin.broadcast.NormalBroadCast">
            <intent-filter>
                <action android:name="com.llay.admin.mydemo.sendMessage" />
            </intent-filter>
        </receiver>

结果:运行结果图:
输入文字,点击发送广播按钮:
这里写图片描述

(动态注册注册)
1、布局界面同上
2、广播代码同上
3、Actvity中代码

public class BroadcastReceiverActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText editNormal;
    private Button buttonNormal, buttonOrdered;
    NormalBroadCast normalBroadCast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast_receiver);
        init();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.llay.admin.mydemo.sendMessage");
        normalBroadCast = new NormalBroadCast();
        registerReceiver(normalBroadCast, intentFilter);
        Log.e("xiaomi", "注册广播");
    }

    private void init() {
        editNormal = (EditText) findViewById(R.id.normal_edit);
        buttonNormal = (Button) findViewById(R.id.normal_button);
        buttonOrdered = (Button) findViewById(R.id.ordered_button);
        buttonNormal.setOnClickListener(this);
        buttonOrdered.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.normal_button:
                String s = editNormal.getText().toString();
                //Intent intent = new Intent(BroadcastReceiverActivity.this, NormalBroadCast.class);//显示启动广播
                Intent intent1 = new Intent("com.llay.admin.mydemo.sendMessage");
                intent1.putExtra("xiaomi", s);
                sendBroadcast(intent1);
                break;
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(normalBroadCast);
        Log.e("xiaomi", "取消广播");
    }

注意:动态注册广播的时候,必须要你在activity中的onCreate或者onResume中订阅广播,同时你必须在onDestory或者onPause中取消广播订阅。
4、AndroidManifest.xml中注册广播

<receiver android:name="com.llay.admin.broadcast.NormalBroadCast">
</receiver>

结果:运行结果图:
输入文字,点击发送广播按钮:
这里写图片描述

3、2 有序广播(Ordered broadcasts)

注意:这里我就直接用静态注册广播了,这也是推荐使用的。因为动态注册会随应用的关闭而消失。
1、布局文件同上
2、广播代码
A广播:
OrderedBroadCastA.java文件:

public class OrderedBroadCastA extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String s = intent.getStringExtra("xiaomi");
        Log.e("orderedA", s);
        //终止Ordered广播传递
//        abortBroadcast();
        Bundle bundle = new Bundle();
        bundle.putString("传递给下一个广播", "ss");
        setResultExtras(bundle);
    }

注意:其中广播A可以使用abortBroadcast()来使得传递给下一个的广播终止,使用setResultExtras()来将数据从此广播传递给下一个广播。

3、Actvity中代码

String s1 = editNormal.getText().toString();
Intent intent2 = new Intent("com.llay.admin.mydemo.sendMessage");
intent2.putExtra("xiaomi", s1);
sendOrderedBroadcast(intent2, null);
break;

4、AndroidManifest.xml中注册广播

<!--优先级高-->
        <receiver android:name="com.llay.admin.broadcast.OrderedBroadCastA">
            <intent-filter android:priority="2">
                <action android:name="com.llay.admin.mydemo.sendMessage" />

            </intent-filter>
        </receiver>

<!--优先级低-->
        <receiver android:name="com.llay.admin.broadcast.OrderedBroadCastB">
            <intent-filter android:priority="1">
                <action android:name="com.llay.admin.mydemo.sendMessage" />
            </intent-filter>
        </receiver>

注意:这里都是采用的是静态的注册广播的方式,android:priority属性是设置优先级,数字越大,优先级越高,越会先执行。

结果:运行结果图:
输入文字,点击发送广播按钮
此处A广播中使用abortBroadcast();方法
这里写图片描述
此处A广播不使用abortBroadcast();方法
这里写图片描述

【Bug已解决】Request timed out / API Timeout — Claude Code 请求超时解决方案 方案适用场景推荐指数难度方案一:增加超时大任务处理⭐⭐⭐⭐⭐低方案二:切换 SonnetOpus 太慢⭐⭐⭐⭐⭐低方案三:缩小范围大代码库⭐⭐⭐⭐⭐低方案四:优化网络网络延迟高⭐⭐⭐⭐中方案五:减少 MCPMCP 超时⭐⭐⭐中方案六:流式响应长生成任务⭐⭐⭐低根本原因:请求超时最常见原因是请求体过大(35%)和 Opus 模型推理慢(25%),默认 60 秒超时阈值对大型任务不够最佳实践。 阅读详情

相关推荐

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

判断广播是否已注册

在做Android项目时,有时候需要知道某个BroadcastReceiver是否已经注册,从而决定是发送广播让Receiver处理,还是通过其他方式处理。 那么,如何判断某个广播接收者BroadcReceiver是否已经注册了呢? PackageManager 类中提供了 List queryBroadcastReceivers(Intent intent, int

wangsf1112的专栏 2万+

Visual Tracker Benchamark傻瓜式教程(二)

问题  1 1  在调用main.m跑TRE和SRE时,因为会生成相应的.mat数据文件,如果跑完以后发现自己算法生成的.mat文件有问题,那么要把该文件删除,待找到错误原因后,重新生成相应的.mat文件。因为程序中写的是如果已经存在了.mat文件,例如已经存在car4_STC.mat文件,即使该文件中的数据有错误,但是重新跑时会默认该文件中的数据写完,不会重新写入数据 问题  2  b

mingbujingren的专栏 9928

queryBroadcastReceivers

eg查找开机启动的组件 List list = this     .getPackageManager()     .queryBroadcastReceivers(       new Intent("android.intent.action.BOOT_COMPLETED"),       0);

天天好心情 8457

麦克风声源定位原理_声源定位—如何定位到噪声根源?

前言TPA(传递路径分析)专题系列已经开篇。其遵循方法论:源(Source)——路径(Path)——响应(Receiver)有人说TPA好,它可以识别出路径处甚至源的载荷特征,可以量化各个路径的贡献量。有人说声源定位好,不管东西南北中,“源”自其中。但是,声源定位识别出来色彩丰富的一个结果,这结果被您拿来应付工作了,还是真正帮您解决了问题?声源定位定位到了噪声的根源了么?对于一些声源现,...

weixin_39943678的博客 3974

基于Freertos与lwip移植FreeModbusTcp协议

基于FreeRTOS的N32G457VEL7之LWIP网络协议栈移植-优快云博客。

Dd_456456的博客 3239

广播onReceive()方法的context类型探究

1. 铺垫 1). 非Activity类型的context并没有所谓的任务栈; 2). 出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只...

lyl0530的博客 1万+

从零到一:DAMASK与ABAQUS联合仿真的环境配置艺术

本文详细介绍了在Ubuntu 16.04系统中配置DAMASK与ABAQUS2017联合仿真环境的完整流程,涵盖系统基础环境搭建、Python科学计算环境构建、DAMASK核心安装与配置,以及ABAQUS集成与联合调试。通过实战案例和高级调试技巧,帮助用户快速掌握有限元分析中的晶体塑性模拟技术。

weixin_29253711的博客 858

android 广播接收机,android-从活动向广播接收器传递值,并从广播...

如果您的BroadcastReceiver是在单独的类文件中定义的,那么您可以简单地将该值广播到该接收器.一旦接收到该值,就可以通过使用接收者的上下文来实现服务的魔力更新:在您的活动中:Intent in = new Intent("my.action.string");in.putExtra("state", "activated");sendBroadcast(in);在您的接收器中:@Ove...

weixin_31572321的博客 174

智能优化电池:基于单片机的电池管理系统

设计简介: 本设计是基于单片机的电池管理系统,主要实现以下功能: 可通过LCD1602显示温度、电压电流值; 可通过按键调整温度、电压和电流的阈值; 用ADC0832将模拟量转换为数字量。 标签:51单片机、LCD1602、ADC0832 效果图: 总体资料: 原理图: 软件设计流程: 系统框图: 本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成电动汽车的电池管理的整个系统,...

专注单片机实战教学,分享单片机学习资料 375

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

突破Android O广播限制

Android O对隐式广播进行了限制, 其限制链接说明: https://developer.android.com/about/versions/oreo/background 如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,这会引发问题;触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验。 为了缓解这一问题,...

一个小菜鸟的成长之路的专栏 1127

实验二 离散控制系统的性能分析(时域/频域)

1.掌握离散闭环系统的动态性能时域参数的分析与计算方法; 2.掌握离散系统稳定性的频域典型参数分析与计算方法。 MATLAB 软件( 2022a); 1.在 Matlab 语言平台上,通过给定的闭环离散系统,深刻理解时域参数的物理意义与计算方法,内容包括如下: 阻尼比参数分析:Z 平面与 S 平面的极点相互转换编程实现;分析 S/Z 两个平面域特殊特性(水平线、垂直线、斜线、圆周等)的极点轨迹相互映射方法;系统阶跃响应参数:上升时间和超调量等。 2. 采用频域分析方法,通过编程计算,进一步理解离散系统的稳定

m0_51738372的博客 2479

Android四大基本组件介绍与生命周期

转自:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解四大基本组件 Activity : 应用程序中,一个Activi

幕牧的专栏 731

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

broadcastReceive广播机制

<br />1:android的广播机制介绍<br />2:broadcastReceiver的作用<br />3:broadcastReceiver的编写方法<br />     继承BroadcastReceiver类实现onReceive方法<br />4:broadcastReceiver的生命周<br />     接受广播之后就结束 以后有广播在重新接受<br />5:开发步骤:<br />1:首先定义一个类继承BroadcastReceiver 并实现oReceive方法<br />    p

1227

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android开发学习笔记整理(15)-BroadcastReceive和Service

Service 什么是Service? Service是Android四大组件之一,他能够在后台执行一些比较耗时较长的操作,并且不提供用户界面。应用场景:后台播放音乐等。简单理解为没有界面的Activity Service的创建 继承Service类并重写bind方法,并在Manifest.xml中注册。 Service的两种启用方式 (1)startService方式 (2)bindService方式 Service的生命周期 使用Service完成计算案例 代码部分: part1: ...

qq_44458489的博客 356

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《Android中级工程师》BroadcastReceive工作流程

前言 关于BroadcastReceive的使用已经了解了很多,但是使用都是应用层的,我们需要了解frameworks层是如何实现的,才能更深层次理解它的工作原理。

旅途的乞讨者的博客 650

Android简单回顾

Android简单回顾 Android runtime包括一些核心库和虚拟机。另外Android的进程间通信通过binder。像一些插件就在application Framework层作文章。 组件与application Activity:通常一个Activity就是一个单独的屏幕 BroadcastReceive:广播接收器没有用户界面 Service:具有较长的生命周期,没有用户...

kernweak的博客 199

android广播接受使用,android – 广播接收器onReceive()从未调用过

我在ICS中遇到此问题,但在以前的版本中没有:从App1,我发送广播并尝试在App 2活动中接收它.但是在App 2的活动中从未调用onReceive.虽然我已正确指定了所有内容,但我无法理解该块的onReceive被调用的是什么.我先运行BroadcastReceive然后再运行BroadcastSend任何帮助我解决这个问题的帮助都非常感谢.App1发送活动public class Broad...

weixin_33247358的博客 791

四大组件以及生命周期

1:了解四大基本组件 Activity :     应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。   Activity之间通过Intent进行通信。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。   典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。而动...

学习笔记 234

Android 应用安全防御措施

一:静态代码块分析     使用静态代码分析可以再不运行程序的前期下对程序存在的潜在问题进行分析,如控制内存使用越界等。SDK提供了一个静态代码分析工具lint,这个工具可以再通过扫描工程的所有代码和资源文件后根据所得结果,将检测的问题分为6大类正确性、可用性、安全性、无障碍性、性能、国际化。可以根据问题类型和内容将代码进行修改和优化。 二:Android Java代码混淆     混淆就是对发布...

weixin_33676492的博客 291

Android学习笔记(一)android简介,android架构,android四大组件,android环境搭建

Android学习笔记一 android简介,android架构,android四大组件,android环境搭建 很高兴和大家一起学习Android,我开发android两年多从最初的菜鸟到现在独立负责公司android产品的开发,一路走来苦中有甜。一直想建个自己的博客录一套自己的android学习视频与大家分享交流,奈何公司项目一直很多自己一个人同时搞一两个项目确实很忙,不过最近

leiyu2008pengyou的博客 598

02 Android基础理论

基础理论篇  一、Android概念         Android是一个以Linux为基础的开发源代码操作系统,主要用于移动设备,由Google成立的Open Handset Alliance(OHA,开发手持设备联盟)持续领导与开发中。 二、术语解析 APK apk是Android包的扩展名,一个Android包包含了与某个Android应用程序相关的所有文件,a

北极的冰箱 1523

BroadcastReceiver静态注册和动态注册的区别

BroadcastReceiver静态注册和动态注册的注意点: 广播可以有两种处理方式,第一种就在AndroidManifest.xml文件中的节点里进行订阅:

621

Android学习笔记 88. Broadcast receivers 广播接收器

Android学习笔记 88. Broadcast receivers 广播接收器

代码改变世界 371

android开机广播过滤_Android面试题6–BroadcastReceiver(广播)

BroadcastReceiver是四大组件之一,有接收广播机制,相对应就有发送广播机制。Android中,通过该机制,使得消息能在各个组件间、各个进程间传递,起到邮递员的作用。Broadcast在Android系统中应用的非常广泛,比如电池状态的变化、电话的接收、短信的接收、键盘输入法切换和网络连接状态变化都会由系统发送一个广播,然后应用程序通过BroadCastReceiver可以监听这些广播...

weixin_39577289的博客 337
上一篇: Service的理解和使用
下一篇: Android的数据库(SQLite)学习
llayjun
博客等级 码龄12年 73粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值