EventBus → SharedFlow

作者:plainGeek日期:2026/7/3

EventBus → SharedFlow

老写法(Java + EventBus)

1// 事件定义
2public class LoginEvent {
3    private long userId;
4    public LoginEvent(long userId) { this.userId = userId; }
5    public long getUserId() { return userId; }
6}
7
8// 发送
9EventBus.getDefault().post(new LoginEvent(123));
10
11// 接收
12@Subscribe(threadMode = ThreadMode.MAIN)
13public void onLogin(LoginEvent event) {
14    updateUI(event.getUserId());
15}
16

问题在哪里

EventBus 依赖反射查找 @Subscribe 方法,有轻微性能开销。事件发送和接收完全靠运行时匹配,编译期无任何检查。过多全局事件后变得难以追踪。

新写法(SharedFlow)

1// 事件定义  sealed class 类型安全
2sealed class AppEvent {
3    data class Login(val userId: Long) : AppEvent()
4    data class Logout(val reason: String) : AppEvent()
5}
6
7// 事件总线
8object EventBus {
9    private val _events = MutableSharedFlow<AppEvent>(extraBufferCapacity = 64)
10    val events: SharedFlow<AppEvent> = _events
11
12    suspend fun emit(event: AppEvent) { _events.emit(event) }
13}
14
15// 发送
16viewModelScope.launch { EventBus.emit(AppEvent.Login(123)) }
17
18// 接收
19lifecycleScope.launch {
20    repeatOnLifecycle(Lifecycle.State.STARTED) {
21        EventBus.events.collect { event ->
22            when (event) {
23                is AppEvent.Login -> updateUI(event.userId)
24                is AppEvent.Logout -> handleLogout(event.reason)
25            }
26        }
27    }
28}
29

一句话注意

sealed class 的优势在于 when 分支的穷举检查——加了新事件类型但忘了处理,编译直接报错。EventBus 的 @Subscribe 是运行时才发现遗漏。

SharedFlow 不需要 register/unregister,协程 scope 取消自动停止收集。生命周期感知由 repeatOnLifecycle 处理,比 EventBus 的 @Subscribe + 手动 register 干净得多。


Java Android 老项目迁移系列,持续更新中。


EventBus → SharedFlow》 是转载文章,点击查看原文


相关推荐


【Linux基础】初始Linux
键盘敲碎了雾霭2026/6/25

🎬 博主名称:键盘敲碎了雾霭 🔥 个人专栏: 《C语言》《数据结构》 《C++》 《Matlab》 《Python》 《Linux》 ⛺️指尖敲代码,雾霭皆可破 文章目录 一、Linux发展史1.1 UNIX发展历史1.2 Linux发展历史 二、开源三、应用现状四、发行版本五、os概念六、使用XShell远程登录Linux6.1 会话方式登录6.2 命令行登录6.3 多用户使用 文章结语 一、Linux发展史 要说Linux,还


【Java基础】链表的七十二变——从LRU缓存到手写浏览器前进后退
zzz_23682026/6/16

链表的七十二变——从LRU缓存到手写浏览器前进后退 写在前面的目录 一、真实面试真题引入 二、链表的底层解构——不止是 next 指针   2.1 单向链表:最简单的链式结构   2.2 双向链表:前后眼的设计哲学   2.3 链表反转四步拆解   2.4 哨兵节点——让边界消失   2.5 跳表——给链表加个索引 三、"纯手工、零依赖"原创案例实战   3.1 浏览器前进后退——双向链表实现标签页导航   3.2 LRU 缓存淘汰——HashMap + 双向链表的 O(1) 魔法 四、


安全第一与合规治理:魔芋 AI 正式发布企业级大模型网关 Mai Gateway
青莲网络2026/6/9

在现代企业业务创新中,人工智能(AI)正逐步成为关键驱动力。随着大语言模型的发展,企业应用架构已从传统的微服务、云原生架构,加速向AI原生架构演进。在此过程中,企业在AI集成、系统稳定性、安全合规及管理复杂性方面面临诸多挑战。 为了帮助企业安全、高效地落地 AI 应用,魔芋 AI(MoYu AI)正式推出重磅核心产品——Mai Gateway(大模型网关)。作为企业 AI 应用与模型服务、工具及其他 Agent 之间的核心连接组件,Mai Gateway 通过提供协议转换、安全防护、流量治理和


C++与 Lua的交互
kebeiovo2026/6/1

适用场景:游戏服务端、客户端热更新、业务逻辑解耦、C++高性能底层+Lua灵活业务架构 核心定位:C++负责高性能底层(网络、内存池、epoll、计算),Lua负责业务逻辑、配置解析、热更新,二者结合是游戏行业主流生产方案。 一、交互原理 1.1 交互核心载体 所有C++与Lua的交互,全部围绕 Lua虚拟机(lua_State) 实现; Lua 是编译型 + 解释型的嵌入式脚本语言,自身不依赖独立进程运行,它的代码最终交由 Lua 虚拟机(Lua VM) 执行。 Lua 虚拟机本质


营销数据分析:如何利用IP归属地识别和规避虚假流量
TechWayfarer2026/5/12

一、流量作弊:程序化广告的隐形黑洞 程序化广告已成为数字营销的主流投放方式,但伴随着海量流量而来的,是日益猖獗的虚假流量产业链。根据中国互联网络信息中心发布的数据,截至2025年6月,我国网民规模已达11.23亿人,互联网普及率达79.7%。庞大的用户基数为黑灰产提供了可乘之机。 在程序化广告交易中,虚假流量问题尤为突出。据行业实测数据显示,某DSP平台日均处理超过50亿次广告竞价请求,其中约30%的流量来自数据中心IP或代理IP,这些流量中真正产生转化的不足0.5%,却消耗了平台近四分之一


03ab-PyTorch安装教程 📚
郑恩赐2026/5/3

03ab-PyTorch安装教程 📚 章节阅读路线图 🗺️ flowchart LR A["1. 概述"]:::concept --> B["2. 安装前准备"]:::setup B --> C["3. CPU版本安装"]:::cpu C --> D["4. GPU版本安装"]:::gpu D --> E["5. 验证安装"]:::verify classDef concept fill:#e3f2fd,stroke:#1565c0 clas


廉价 VPS 越来越少,不是没活动,是真的没货了
小墨同学boy2026/4/24

很多小伙伴都来问我什么时候 DMIT 会有活动,特价款什么时候补货,其实我自己都不知道,甚至别说活动款,连很多廉价 VPS 厂商都缺货了。 今天早上一起来,本来开开心心的看监控站点的内容,结果发现 Racknerd 的特价套餐基本全线缺货,这还不是第一次了。前段时间 CloudCone 的优惠套餐挂着缺货,这两家向来是廉价 VPS 圈的地板价代表,现在同时没货。翻了一圈,我才意识到不是商家不想做活动,是真的没货可卖。 不是没活动,是货快没了 不知道有没有 mjj 和我一样,过去两三个月一直盯


整洁架构三连问:是什么,怎么做,为什么要用
暖阳_2026/4/15

整洁架构问答 Q1:什么是整洁架构? 由 Robert C. Martin(Uncle Bob)提出,核心思想:业务逻辑独立于框架、UI、数据库等外部细节,依赖关系只能从外层指向内层。 四层结构 ┌─────────────────────────────────┐ │ Frameworks & Drivers │ ← Web、数据库、UI(最易变) │ ┌─────────────────────────┐ │ │ │ Interface Adapters


Flutter 框架跨平台鸿蒙开发 - 跟生活有关的心情日记应用开发
小雨天気.2026/4/7

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net 一、项目概述 运行效果图 1.1 应用简介 心情日记是一款专注于情感记录与追踪的移动应用,为用户提供一个私密、便捷的空间记录每日心情变化。在快节奏的现代生活中,人们常常忽略了对自身情绪的关注与觉察,本应用帮助用户追踪情绪轨迹,从而更好地了解自己、关爱自己。 应用支持八种心情类型选择,配以表情符号与主题色彩,让情绪表达更加直观生动。日记撰写支持标题、内容、


第12章 I2C通信协议全解:底层时序、主从机通信与AT24C02、MPU6050传感器实战
是翔仔呐2026/3/29

前言 上一章我们通过硬件I2C完成了OLED屏的驱动开发,实现了字符与图像的显示,但未深入拆解I2C协议的底层逻辑。I2C是工业嵌入式开发中最常用的低速串行总线,是传感器、存储芯片、显示外设的核心通信方式。对应51单片机开发,我们通常通过软件翻转IO口模拟I2C时序,存在时序精度差、CPU占用率100%、多从机兼容性差、无硬件错误处理的痛点;而STM32内置硬件I2C控制器,可自动生成标准时序、处理应答机制、支持DMA高速传输,完美适配工业场景多设备、高稳定性的通信需求。新手入门I2C普遍面临三

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读