Android四大组件之BroadcastReceiver

Android BroadcastReceiver总结 #BroadcastReceiver综述 广播接收器,顾名思义,用来接收广播的。 一个广播关联两个角色,广播发送方、广播接收方,BroadcastReceiver是接收方角色。 广播发送方可以是应用内组件、其它应用,也可以是系统,BroadcastReceiver根据自己设置的过滤器IntentFilter来选择性接收。 BroadcastReceiver通过接收这些广播,实现了与其它组件、应用间的通信。 1.广播接收器注册时是被注册到系统,发送广播时也是... 阅读详情

Android基础知识梳理-四大组件之BroadcastReceiver

定义

Broadcast(广播):一种广泛应用在应用程序之间传输信息的机制;

BroadcastReceiver(广播接收器):用于接收来自系统和其他应用的广播,并对其进行响应的组件。

注册

1.定义广播接收者

继承BroadcastReceiver,实现自定义的广播接收者,实现onReceive()方法用于接受广播

public class ExampleBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = ExampleBroadcastReceiver.class.getSimpleName();
    
    private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
    
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ACTION_BOOT.equals(intent.getAction())) {
            Log.i(TAG, "receive boot completed broadcast");
            Toast.makeText(context, "system boot completed.", Toast.LENGTH_LONG).show();
        }
    }
} 

当onReceive()方法执行完成之后,ExampleBroadcastReceiver生命周期结束可能会被系统回收,所以onReceive()中不建议进行异步操作;另外,由于ANR限制,onReceive()方法必须在10秒内执行完成。

2.静态注册

在AndroidManifest.xml中注册

<manifest ...>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
	<application ...>
	    <receiver
            android:name=".broadcast.ExampleBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
	</application>
</manifest> 
  • 静态方式注册广播,即使应用未启动,也能接收到广播,所以可以利用广播作为应用的自启动和保活机制。
  • android:name:表示自定义的广播接收者类
  • action:指定了接收的广播类型,这里表示接受系统开机启动广播
  • uses-permission:声明我们需要使用到接收开机状态的权限

3.动态注册

public class ExampleActivity extends AppCompatActivity {
    private ExampleBroadcastReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myReceiver = new ExampleBroadcastReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.BOOT_COMPLETED");
        registerReceiver(myReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
} 
  • 在Activity的onCreate()中通过registerReceiver注册广播,并指定监听的广播类型;最后在onDestory()中关掉广播监听
  • 动态方式注册广播,用户可以在需要使用时进行注册,不再使用后关闭掉广播监听,使用上更为灵活

分类

广播可以分为无序广播(默认)、有序广播、本地广播和粘性(Sticky)广播。

无序广播

无序广播是一种异步执行方式,所有广播接收者几乎都能同时接收到该广播,没有先后顺序,直到没有接收者再接受广播则广播结束。

  • 发送广播

    public void sendCustomBroadcast(View view){      
      Intent intent = new Intent("com.example.broadcast");     
      sendBroadcast(intent);
    } 
    

有序广播

有序广播是一种同步执行方式,广播发送之后,同一时刻只会有一个广播接收者在执行广播接收,广播执行者按照优先级顺序进行广播接收,而且在接收的过程中可以截断广播,后面的接收者就无法再接收到该广播。

  • 声明广播接收者优先级

    <manifest ...>
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    	<application ...>
    	    <receiver
                android:name=".broadcast.ExampleBroadcastReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter android:priority="100">
                    <action android:name="com.example.broadcast"/>
                </intent-filter>
            </receiver>
    	</application>
    </manifest> 
    

    在IntentFilter中通过android:priority指定优先级,值越大优先级越高

  • 发送广播

    public void sendOrderBroadcast(View view){      
      Intent intent = new Intent("com.example.broadcast");     
      sendOrderBroadcast(intent);
    } 
    
  • 截断广播

     @Override
    public void onReceive(Context context, Intent intent) {
        abortBroadcast();
    } 
    

    在广播接收者的onReceive()方法中,可以通过调用abortBroadcast()方法截断广播,优先级较低的广播接收者就无法再接收到该广播

本地广播

本地广播是一种局部广播,只能在本应用内部传播,广播接收者也只能接收本应用内部的广播,由于这一特点,所以本地广播不支持静态注册方式。

  • 注册本地广播接收者

    public class ExampleActivity extends AppCompatActivity {
        private ExampleBroadcastReceiver myReceiver;
        
        private LocalBroadcastManager localBroadcastManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            myReceiver = new ExampleBroadcastReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("android.intent.action.BOOT_COMPLETED");
            localBroadcastManager = LocalBroadcastManager.getInstance(this);
            localBroadcastManager.registerReceiver(intent, filter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            localBroadcastManager.unregisterReceiver(myReceiver);
        }
    } 
    

    通过LocalBroadcastManager.getInstance()或者本地广播管理的实例,使用该实例来注册广播接收者

  • 发送广播

    private void sendBroadcast() {
        Intent intent = new Intent("com.example.broadcast");     
    	localBroadcastManager.sendBroadcast(intent);
    } 
    

粘性广播

前面了解了几种广播类型,我们可以知道,当所有广播接收者处理完广播接收之后则广播结束。也就是说,只有在发送前已完成注册的广播接收者才能接收到该广播。那么如果我们在某种情况下,广播接收者注册晚于广播发送时间,但是我们又想接收到该广播,该如何处理呢?这里就需要使用到粘性广播。

  • 粘性广播在发送之后会保存刚发送过的广播,当有新注册的广播接收者注册后可以继续使用该广播,直到该广播被移除;

  • 粘性广播只会保存最后一次的广播,也就是说如果在某个广播接收者注册前,发送了多条同样的广播,那么广播接收者注册后只能接收到最后一条;

  • 粘性广播通过sendStickyBroadcast()发送广播,removeStickyBroadcast()移除广播,且需要添加权限<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。

所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。以上知识笔记全部免费分享,**如有需要获取知识笔记的朋友,可以点击下方二维码费领取。

26、遥感图像无监督变化检测方法解析 本文详细解析了遥感图像中的无监督变化检测方法,重点介绍了基于快速模糊 C-均值聚类的无监督变化检测方法(CDFFCM)在滑坡映射中的应用。CDFFCM 方法利用图像结构信息和高斯金字塔技术,提高了检测的准确性,减少了参数数量,并缩短了计算时间。该方法通过与传统方法的对比,展现出在高分辨率遥感图像滑坡检测中的显著优势。此外,文章还探讨了 CDFFCM 的未来发展趋势,包括技术融合、多模态数据应用以及智能化与自动化方向。 阅读详情

相关推荐

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 460

Android四大组件——BroadcastReceiver

安卓中广播接收器BroadcastReceiver的初级使用,重点是Bundle信息的传递

weixin_43240212的博客 1347

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2080

Android中的BroadcastReceiver:深入理解与应用

这些广播消息可以是系统级别的,如网络状态变化、电池电量变化等,也可以是应用级别的,如自定义的广播事件。BroadcastReceiver通过监听特定的广播意图,并在接收到匹配的广播时执行相应的操作,如更新UI、执行后台任务等。通过深入理解BroadcastReceiver的基本概念、工作原理和注册方式,开发者可以更加高效地利用这一组件实现应用间的通信、系统事件监听以及定时任务等功能,从而提升应用的用户体验和功能丰富性。:随着应用的增长和功能的增加,可能需要管理大量的BroadcastReceiver。

weixin_42487687的博客 1729

2、TCGA数据处理(差异分析前处理)

注意:1、是R语言中用于读取文本文件并创建数据框的函数。它可以从文本文件中读取数据并将其存储为数据框的形式,每一列代表一个变量,每一行代表一个观察值。2、括号要成对,不能少了;3、file = 'TCGA-LIHC.htseq_counts.tsv'引号可以是单或双引号,建议单;4、逗号主要中英文,都是用英文模式才没错;5、.tsv文件类型必须要有,不能删除,否则读不进来;6、上面代码将TCGA-LIHC.htseq_counts.tsv文件读入并赋值给count1。

PLW_12的博客 2668

手把手教你用Vivado的STARTUPE3原语驱动S25FL256S Flash(附完整Verilog代码)

本文详细介绍了如何利用Xilinx UltraScale+系列FPGA的STARTUPE3原语驱动S25FL256S SPI Flash,包括原语配置、SPI协议实现、状态机设计及调试技巧。通过完整的Verilog代码示例和性能优化建议,帮助开发者高效完成Flash通信解决方案的开发与集成。

weixin_30660027的博客 460

Android基础 - BroadcastReceiver全面解析

简介 BroadcastReceiver,同样是Android四大组件之一,有两个重要角色:广播发布者、广播接受者。 使用场景及作用 作用 用于接受或者监听应用发出来的广播,并作出相应的响应。 使用场景 用于不同组件间的通信,包括应用内和不同应用间的交互通信。 监听系统资源的变化,如网络变化、SD卡状态等 多进程的通信 实现原理 是典型观察者模式的应用,基于消息发布...

学习,思考,输出 3096

【深度学习驱动流体力学】Python流体力学Ansys Fluent

PyFluent 是一个将 Python 编程语言与 Ansys Fluent 流体动力学 (CFD) 仿真软件集成的工具。它允许用户通过 Python 脚本来控制和自动化 Fluent 中的仿真任务,实现从预处理、求解到后处理的全流程控制。PyFluent 结合了 Python 的灵活性和 Fluent 的强大功能,提供了一种高效且灵活的 CFD 仿真方法。PyFluent 是一个强大而灵活的工具,使用户能够通过 Python 脚本全面利用 Ansys Fluent 的功能。

源代码杀手的博客 3125

【Android】四大组件之BroadcastReceiver

BroadcastReceiver用于监听系统或应用发出的广播事件,实现跨组件通信。

贫道绝缘子的博客 2070

非技术面试题精选大全

回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业喜欢有礼貌的求职者。

吃面爱放香菜的博客 436

将GroundDINO、EdgeMTAM和FoundationPose的ONNX模型转换为TensorRT格式并部署到NVIDIA Jetson Orin平台的完整技术指南

TensorRT模型部署指南:从ONNX到Jetson Orin的优化实践 本文详细介绍了将GroundDINO、EdgeMTAM和FoundationPose模型从ONNX格式转换为TensorRT引擎并在Jetson Orin平台部署的全流程。主要内容包括: 环境配置:JetPack 5.1.2+环境搭建,TensorRT工具链安装,存储与交换空间优化 模型转换:动态尺寸处理、自定义算子实现、层融合策略及INT8量化校准 部署优化:引擎序列化加密、多模型并行推理架构设计、CUDA流异步执行 实战技巧。

huanghm88的专栏 438

android四大组件(Activity,Service,BroadcastReceiver,Content Provider)

安卓的四大组建,五大布局Android四大组件:Activity、Service、Broadcast Receiver、Content Provider。1、 Activity 可以去本人博客activity了解学习是Android程序与用户交互的窗口,从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个

Mr_haimeng的博客 1358

tsmc12: m0po max length问题(H384.M0_PO.L.1)

手动调整可以挪cell,制造上下两个row相对的至少一个site的空间,通过插普通filler来解决,这里需要注意的是,tsmc12有via0的规则,需要让via0落在via0 grid上。在pt eco之后会有一些m0po max length问题出现,大部分问题都可以通过替换decap来解决,少部分由于局部density过高,需要手动调整。更多学习内容请关注「拾陆楼」知识星球。#ICC2中替换decap的参考脚本。

m0_61544122的博客 792

Android 四大组件基础(Activity/Service/BroadcastReceiver/ContentProvider)工控场景用法

Android四大组件在工控场景中的应用与手机开发有显著差异。工控开发以Service为核心,负责后台数据采集(串口/Modbus)、设备监控等关键任务,需通过前台Service保证持续运行。Activity主要用于全屏数据显示和参数配置,需禁用旋转和返回键退出。BroadcastReceiver实现开机自启、外设状态监听等功能。ContentProvider则用于多应用间共享传感器数据。工控开发强调稳定性,四大组件需针对工业环境特殊配置,如固定屏幕方向、防进程回收等。

爱片闲串,爱钓鱼,爱中医,爱分享 534

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

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

Android四大组件——BroadcastReceiver详解

一、 定义 BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多广播,是一个全局的监听器,属于Android四大组件之一 Android 广播分为两个角色:广播发送者、广播接收者 二、 作用 用于监听 / 接收 应用发出的广播消息,并做出响应 应用场景 a. 不同组件之间通信(包括应用内 / 不同应用之间) b. 与 Android 系统在特定情况下的通信 如当电话呼入时、网络可用时

QLHepburn的博客 1679

pscad IEEE标准系统搭建说明

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

Android题集四大组件之Content provider、BroadcastReceiver

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。

2401_85730911的博客 950

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android 四大组件——BroadcastReceiver(广播)

本文全面解析Android四大组件之一的BroadcastReceiver。主要内容包括:1)广播接收器定义及核心设计思想,作为响应系统或应用内事件的"事件监听器";2)工作原理,包括系统匹配和执行流程;3)两种广播类型(标准广播和有序广播)及使用示例;4)两种注册方式(静态和动态);5)本地广播的优势及使用方法;6)安全考量如权限设置和exported属性;7)最佳实践,包括避免耗时操作和生命周期管理;8)常用系统广播列表。文中通过有序广播的完整示例,演示了从权限检查到最终处理的链式流

indeedes的博客 1009

Android四大组件之一BroadcastReceiver总结

1、定义 BroadcastReceiver即广播,属于Android四大组件之一 广播分:广播发送者、广播接收者 2、作用 监听其它应用/系统应用发出的消息,自身做出响应。 3、应用场景 1、不同应用之间通信; 2、应用内通信; 3、获取系统一些状态变化; 4、实现原理 广播使用观察者模式,基于消息发布/订阅事件模型 5、广播注册方式 注册方式分:静态注册、动态注册 静态注册:在AndroidManifest.xml里通过****标签声明 此App...

ming15920的博客 238

Android四大组件之一 BroadCastReceiver详解

一、什么是BroadCastReceiver? 即广播,是一个全局的广播监听器,属于Android四大组件之一。 理解广播和广播接收器 广播事件处理属于系统级的事件处理。 一个应用可以在发生特定事件时发送BroadCast,系统中任何应用只要注册了对应的Receiver就会接收到此BroadCast。 广播事件机制是应用程序(进程间)之间通信的一种手段。 二、BroadCastRece...

familyyan的博客 1077

Android 四大组件之 ContentProvider 与 BroadcastReceiver

四大组件里,Activity 是"看得见的脸"、Service 是"看不见的腿",剩下两个是搭起整个系统协作骨架的"管道"。

2301_76797664的博客 521

Android四大组件---BroadcastReceiver

前言: BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver的一切相关知识 目录: 下面小可会把自己使用广播的心得体会以及广播dev具体用途详细的讲解。 1:定义 广播,是一个全局的监听器,属于Android四...

hirezy 1928

安卓四大组件之——BroadcastReceiver广播的详细解析

BroadcastReceiver 身为安卓的四大组件之一,其使用率非常普遍,所以我们要熟练掌握其使用方法。 1,广播的注册方式有两种:静态注册和动态注册 1),静态注册:需要在Androidmanifest 中进行声明,主要用于全局APP中监听,只有完全退出APP才能让其停止工作。 2),动态注册:在代码中注册,不需要在Androidmanifest进行声明,其生命周期随着活

www121104115的博客 596

Android四大组件简述之BroadcastReceiver

BroadcastReceiver详细介绍:http://developer.android.com/reference/android/content/BroadcastReceiver.html

Ricky 2000

Android四大组件之Service、ContentProvider、BroadcastReceiver

文章目录Service生命周期IntentService关于startService和bindServiceAndroidManifest.xml本地Service和远程Service关于bindService的特点Content ProviderBroadcast Receiver分类注册 Service Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。 生命周期 ...

PdKingLiu 1015

Android四大组件:BroadcastReceiver史上最全面解析

https://www.jianshu.com/p/ca3d87a4cdf3

qq_40627648的博客 203

android四大组件之总结篇,Android四大组件之BroadcastReceiver详解

BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。Android 广播分为两个角色:广播发送者、广播接收者一、 作用用于监听 / 接收 应用发出的广播消息,并做出响应应用场景:不同组件之间通信(包括应用内 / 不同应用之间)与 Android 系统在特定情况下的通信(如当电话呼入时、网络可用...

weixin_39583029的博客 228
上一篇: 【Android WebSocket】状态管理框架 - WebSocketGo
下一篇: Android代码混淆及ProGuard手册
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值