一文了解Android本地广播

在 Android 开发中,本地广播(Local Broadcast)是一种轻量级的通信机制,主要用于在同一应用进程内的不同组件之间传递消息,而无需通过系统的全局广播机制。这种方法既可以提高安全性(因为广播仅在应用内传播),也能提高性能(不需要跨进程通信)。

本地广播

系统广播

以下是本地广播的详细介绍,包括其使用方法和示例代码。

本地广播的特点和优势

  1. 安全性:本地广播只在应用内部传递,不会被其他应用接收,避免了敏感信息的泄露。
  2. 效率高:本地广播不需要通过系统进程(AMS,Activity Manager Service)来分发,因此效率更高。
  3. 资源节省:相比全局广播,本地广播的开销更小,适合在内部模块之间频繁通信。

使用场景

本地广播适用于以下场景:

  • 应用内组件之间需要传递状态或事件通知,例如在数据加载完成时通知 UI 更新。
  • 不需要与其他应用共享消息内容的情况,特别是涉及隐私或敏感信息的通信。
  • 不需要跨进程的通信,仅限于在同一个应用中使用。

本地广播的实现方法

从 Android API 29 开始,LocalBroadcastManager 被标记为过时(deprecated)。推荐使用其他通信方式(例如 LiveDataSharedFlow 等)。不过在老版本中仍可以使用 LocalBroadcastManager 实现本地广播。

实现步骤

1. 注册本地广播接收器

注册接收器来监听特定的广播事件:

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import androidx.localbroadcastmanager.content.LocalBroadcastManagerclass MyBroadcastReceiver : BroadcastReceiver() {override fun onReceive(context: Context?, intent: Intent?) {// 接收到广播后的处理逻辑val data = intent?.getStringExtra("key")println("接收到的数据:$data")}
}val receiver = MyBroadcastReceiver()
LocalBroadcastManager.getInstance(context).registerReceiver(receiver, IntentFilter("com.example.ACTION_CUSTOM")
)
2. 发送本地广播

使用 LocalBroadcastManager 来发送广播,广播数据仅限于本应用接收:

val intent = Intent("com.example.ACTION_CUSTOM")
intent.putExtra("key", "广播数据")
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
3. 注销本地广播接收器

在不再需要接收广播时(例如在 ActivityonDestroy 方法中),记得注销接收器:

LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver)

使用本地广播的注意事项

  • 生命周期管理:确保在适当的生命周期内注册和注销接收器,避免内存泄漏。
  • 性能考虑:本地广播虽比全局广播更高效,但仍不适合高频率的数据传递。
  • 替代方案:在高 API 版本中,考虑使用 LiveData 或 SharedFlow 进行组件间通信,能够更好地管理生命周期并支持异步数据流。

示例

以下是一个简单的示例应用场景:在后台服务中完成数据加载后,通过本地广播通知 Activity 更新 UI。

在 Service 中发送广播
class MyService : Service() {override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {// 模拟数据加载完成val dataLoadedIntent = Intent("com.example.ACTION_DATA_LOADED")dataLoadedIntent.putExtra("data", "加载完成的数据")LocalBroadcastManager.getInstance(this).sendBroadcast(dataLoadedIntent)return START_NOT_STICKY}
}
在 Activity 中接收广播
class MainActivity : AppCompatActivity() {private val dataReceiver = object : BroadcastReceiver() {override fun onReceive(context: Context?, intent: Intent?) {val data = intent?.getStringExtra("data")println("接收到的服务数据:$data")// 更新 UI}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)LocalBroadcastManager.getInstance(this).registerReceiver(dataReceiver, IntentFilter("com.example.ACTION_DATA_LOADED"))}override fun onDestroy() {super.onDestroy()LocalBroadcastManager.getInstance(this).unregisterReceiver(dataReceiver)}
}

总结

本地广播是一种高效、安全的应用内组件通信方式,适合轻量级的消息传递。然而随着 Android 的演进,LocalBroadcastManager 已被逐步弃用,推荐在更高版本中采用 LiveDataSharedFlow 等生命周期感知的组件来实现同样的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark本地模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 Spark本地模式安装 Spark本地模式的安…

SpringSecurity6+OAuth2.0 从入门到熟练使用

文章目录 简介1、快速入门1.1 准备工作我们先要搭建一个SpringBoot工程① 创建工程 添加依赖② 创建启动类③ 创建Controller1.2 引入SpringSecurity2、 认证2.1 登录校验流程2.2 原理分析2.2.1 SpringSecurity完整流程2.2.2 认证流程详解概念速查:2.3 解决问题2.3.1 思路分析2…

计算机网络——SDN

分布式控制路由 集中式控制路由

自动驾驶革命:从特斯拉到百度,谁将主宰未来交通?

内容概要 自动驾驶技术正在经历一个前所未有的革命性变化,各大企业纷纷抢占这一充满潜力的新市场。以特斯拉和百度为代表的行业巨头,正利用各自的优势在这一技术的赛道上展开激烈竞争。特斯拉凭借其在电动汽车和自动驾驶领域的前瞻性设计与不断革新的技…

Group By、Having用法总结(常见踩雷点总结—SQL)

Group By、Having用法总结 目录 Group By、Having用法总结一、 GROUP BY 用法二、 HAVING 用法三、 GROUP BY 和 HAVING 的常见踩雷点3.1 GROUP BY 选择的列必须出现在 SELECT 中(🤣最重要的一点)3.2 HAVING 与 WHERE 的区别3.3 GROUP BY 可以…

MySQL存储目录与配置文件(ubunto下)

mysql的配置文件: 在这个目录下,直接cd /etc/mysql/mysql.conf.d mysql的储存目录: /var/lib/mysql Ubuntu版本号:

深度学习经典模型之Network in Network

1 Network in Network 1.1 模型介绍 ​ Network In Network (NIN)是由 M i n L i n Min Lin MinLin等人提出,在CIFAR-10和CIFAR-100分类任务中达到当时的最好水平,因其网络结构是由三个多层感知机堆叠而被成为NIN [ 5 ] ^{[5]} [5]。NIN以一种全新的角…

Java版ERP管理系统源码解析:利用Spring Cloud Alibaba和Spring Boot实现微服务架构

ERP系统,亦称为企业资源计划系统,是一种融合了企业多元部门和复杂业务的综合管理信息系统。在全球经济蓬勃发展及企业竞争日趋激烈的背景下,ERP系统已逐步跃升为现代企业管理的核心工具。该系统通过优化资源配置及提升业务流程效率&#xff0…

Python 基础笔记之生成器generator

生成斐波拉契数列 def fib(length):a,b0,1n0while n<length:yield aa,bb,abn1return abc g2fib(10) try:print(next(g2)) 生成器方法&#xff1a; __next__():获取下一个元素 send(value):向每次生成器调用中传值 注意&#xff1a;第一次调用send(None) def gen():i0while…

vscode翻译插件

vscode翻译插件 需求 &#xff1a; 在编写代码的时候&#xff0c; 打印或者定义变量的时候总是想不起来英文名称&#xff0c; 所有就开发了一款中文转换为英文的插件。 功能 1、目前支持选中中文&#xff0c;右键选择打印或者变量进行转换。 2、目前支持选中中文&#xff0…

美格智能5G车规级通信模组:高精度定位守护极致安全

物联网时代&#xff0c;众多应用和设备都需要位置相关服务&#xff0c;尤其是对移动场景而言&#xff0c;定位的需求更加重要。随着自动驾驶、高阶辅助驾驶等智能车载技术的高速发展&#xff0c;在智能车载领域的定位需求除基础的位置信息之外&#xff0c;还对信息获取的速度、…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录&#xff08;三&#xff09;之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

药品进销存表格制作 佳易王药店药品入库出库台账库存管理系统操作教程

一、概述 【软件试用版资源文件下载可以点文章最后官网卡片】 药品进销存表格制作 药店药品入库出库台账库存管理系统操作教程 ‌核心功能全面‌&#xff1a;涵盖药品进货、销售、库存管理&#xff0c;以及数据分析与报表生成。 ‌药品进货管理‌&#xff1a;记录供应商信息和…

网页版五子棋——用户模块(服务器开发)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议-CSDN博客 目录 前言 一、编写数据库代码 1.数据库设计 2.配置 MyBatis 3.创建实体类 4.创建 UserMapper 二、前后端交互接口 1.登录接口 2.注册接口 3.获取用户信息 三、服务器开发 1.代码编写 2.测试后端…

A day a tweet(seventeen)——Visualize Convolution Neural Network!

a.形象化地CNNs visually explained! . .CNN(Convolution Neural Network) 卷积神经网络 a.不可思议的,难以置信的 v.使形象化CNN explainer is an incredible interactive tool to visualize the internal workings of a CNN. n.解释器;讲解员 …

将vscode的终端改为cygwin terminal

现在终端是默认的power shell&#xff0c;没有显示cygwin 接下来选择默认配置文件 找到cygwin的选项即可 然后提示可能不安全什么的&#xff0c;点是&#xff0c;就有了

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段&#xff1a;PT&#xff08;Pre training&#xff09;。使用公开数据经过预训练得到预训练模型&#xff0c;预训练模型具备语言的初步理解&#xff1b;训练周期比较长&#xff1b;微调阶段1&#xff1a;SFT&#xff08;指令微调/有监督微调…

《AI在企业战略中的关键地位:以微软和阿里为例》

内容概要 在当今商业环境中&#xff0c;人工智能&#xff08;AI&#xff09;的影响力如滔滔洪水&#xff0c;愈演愈烈。文章将揭示AI在企业战略中的崛起&#xff0c;尤其以微软和阿里巴巴为代表的企业&#xff0c;这两家科技巨头通过不同方式&#xff0c;将智能技术融入其核心…

aspose如何获取PPT放映页“切换”的“持续时间”值

文章目录 项目场景问题描述问题1&#xff1a;从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法问题2&#xff1a;aspose的依赖包中&#xff0c;所有的关键对象都进行了混淆处理 解决方案1、找到ppt切换的持续时间对应的混淆对象中的字段2、获取ppt切换的持续时间…

Linux挖矿病毒(kswapd0进程使cpu爆满)

一、摘要 事情起因:有台测试服务器很久没用了&#xff0c;突然监控到CPU飙到了95以上&#xff0c;并且阿里云服务器厂商还发送了通知消息&#xff0c;【阿里云】尊敬的xxh: 经检测您的阿里云服务&#xff08;ECS实例&#xff09;i-xxx存在挖矿活动。因此很明确服务器中挖矿病毒…