Jetpack Compose
文章平均质量分 90
fundroid
Android GDE(谷歌开发者专家)| 互联网大厂移动端架构师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
解锁 Jetpack Compose Modifier 顺序的奥秘
Jetpack Compose中Modifier的调用顺序对UI性能和交互行为有重大影响。文章揭示了"布局→绘制→交互"的黄金法则:先定义尺寸约束,再绘制视觉效果,最后添加交互功能。通过常见误区分析,如过早使用clickable导致点击区域过大、冗余padding增加布局计算量,文章展示了优化后的写法。正确顺序不仅能提升性能(减少布局测量次数),还能确保交互符合预期(精确控制点击区域和水波纹效果)。掌握Modifier顺序这一细节,可显著改善列表滚动流畅度等关键用户体验。原创 2026-02-03 08:15:00 · 1312 阅读 · 0 评论 -
Jetpack Compose 内存泄漏案例学习与最佳实践
本文总结了Compose开发中4类常见的内存泄漏问题及解决方案:1)remember块中Lambda捕获外部上下文导致引用无法释放,建议使用DisposableEffect管理;2)ViewModel存储Composable引用导致上下文被锁死,应改为只存储状态数据;3)使用全局协程作用域导致组件销毁后协程仍运行,应改用rememberCoroutineScope或LaunchedEffect;4)CompositionLocal使用静态引用导致全局上下文锁定。针对每类问题提供了错误示例和修复方案,帮助开发原创 2025-12-29 08:15:00 · 1083 阅读 · 0 评论 -
Androidify:谷歌官方 AI + Android 开源示例应用
Android团队推出开源示例应用Androidify,可将用户照片转化为个性化Android机器人形象。该应用整合了Jetpack Compose、Firebase、Gemini和Imagen等核心技术:Compose实现现代化UI和动画效果,Firebase作为AI调度中枢,Gemini负责图像审核与描述生成,Imagen则将文本描述转化为机器人图像。开发者可通过GitHub获取完整代码,学习AI+Android开发的最佳实践。Androidify不仅为用户提供趣味体验,更为开发者展示了前沿技术融合方案原创 2025-11-24 00:46:02 · 970 阅读 · 0 评论 -
Jetpack Compose:深入理解 GapBuffer & SlotTable
本文介绍了GapBuffer和SlotTable的工作原理及其在Jetpack Compose中的应用。GapBuffer通过动态间隙(Gap)实现高效插入和删除,时间复杂度为O(1),类似乐高积木的灵活拼接。SlotTable将UI组件视为字符存储在GapBuffer中,仅更新变化部分,避免全量重组。 性能优化技巧包括:保持UI结构稳定(如使用AnimatedVisibility)、合理使用remember缓存计算结果、为列表项设置稳定key,从而减少Gap移动和重组开销。这些机制共同保障了Compose原创 2025-11-17 08:15:00 · 674 阅读 · 0 评论 -
Google 内部使用的 Jetpack Compose API 设计规范与最佳实践
Compose项目发布最新API设计规范,对Kotlin编码规范进行了补充和调整。规范要点包括:1)常量采用PascalCase命名;2)无返回值的@Composable使用名词+PascalCase命名,有返回值的则使用camelCase动词命名;3)remember函数需以"remember"前缀开头;4)CompositionLocals需以"Local"前缀命名;5)UI组件必须返回Unit。该规范旨在提升Compose代码的一致性和可读性,对开发公共API和原创 2025-11-12 08:15:00 · 831 阅读 · 0 评论 -
掌握 Compose 性能优化三步法:从问题诊断到实战解决
摘要: 本文系统解析了Jetpack Compose的性能优化策略。通过Layout Inspector和稳定性报告诊断重组问题,深入分析Compose的智能重组机制与参数稳定性规则。提出四大优化工具:升级工具链启用强重组、全局稳定性配置、手动注解标记稳定类型、包装类处理特殊场景。最后强调验证优化效果并建立团队规范,确保Compose应用高效运行。文章结合代码实例,为开发者提供从问题定位到解决方案的完整指南,帮助平衡开发效率与应用性能。原创 2025-10-07 10:39:06 · 1059 阅读 · 0 评论 -
基于 Android Jetpack 构建离线优先(Offline-First)应用
构建离线优先的移动应用需要综合运用本地存储、后台同步和分页加载技术。使用Room实现数据本地存储,确保应用在网络断开时仍能访问数据;通过WorkManager智能调度后台任务,在网络恢复时自动同步数据;采用Paging 3实现高效的分页加载,提升大数据量场景下的用户体验。这种技术组合能有效解决网络不稳定问题,使应用具备更可靠的离线运行能力,同时优化性能和电池效率。原创 2025-09-24 08:30:00 · 908 阅读 · 0 评论 -
Compose State 几个常见使用误区与推荐做法
本文探讨了Jetpack Compose中状态管理的常见问题及解决方案。主要问题包括:表单数据在设备旋转时丢失、列表滚动位置重置、跨屏幕导航状态丢失以及不必要的重组。对应的解决方案包括:使用rememberSaveable保存表单状态,为列表项添加稳定键(key),通过ViewModel共享导航状态,以及使用derivedStateOf优化重组性能。文章通过具体代码示例展示了如何正确管理Compose应用中的状态,确保用户体验的连贯性和应用的性能优化。这些实践对构建稳定高效的Compose应用至关重要。原创 2025-09-16 08:30:00 · 692 阅读 · 0 评论 -
Jetpack Compose 流式布局(Flow Layout)全解析
Jetpack Compose 的流式布局(FlowRow/FlowColumn)为构建响应式UI提供了强大支持。与标准布局不同,流式布局能在空间不足时自动换行,特别适合标签、筛选器等需要动态排版的UI组件。相比惰性布局(LazyRow/LazyColumn),它更适合处理固定数量、数量较少的项目,会一次性渲染所有子项。开发者可通过权重(weight)、对齐方式(align)和最大项目数(maxItemsInEachRow/Column)等参数精细控制布局,还能创建类网格结构。流式布局的主轴和交叉轴排列方式原创 2025-09-08 08:30:00 · 1323 阅读 · 0 评论 -
聊聊 Android Wear OS:从系统功能到 Compose 开发的那些事
摘要: Wear OS 作为主流智能手表系统,经历了从 Android Wear 到 Wear OS 5.1 的迭代,兼容性、健康监测和个性化功能逐步完善。其优势在于交互便捷(如 Tiles 快速访问)、专业健康追踪(整合 Fitbit)、高自由度表盘定制及优化的续航表现。相比 watchOS 和鸿蒙 OS,Wear OS 以跨品牌兼容性和丰富应用生态见长。开发时需聚焦核心功能、适配小屏交互、优化功耗,并遵循 Material Design 规范。与手机应用开发相比,Wear OS 更强调简洁交互和独立运行原创 2025-09-05 08:15:00 · 1735 阅读 · 0 评论 -
全新 LifecycleOwner 可组合项:让 Composable 具备独立生命周期
AndroidX Lifecycle 2.10.0-alpha01 引入了可组合的 LifecycleOwner,解决了共享生命周期在屏幕过渡时的问题。现有方案通过 LocalLifecycleOwner 共享 Activity 的全局生命周期,导致过渡期间新旧屏幕同时处于 RESUMED 状态,引发资源浪费。新方案通过 NavLocalProvider 动态计算屏幕状态(返回栈状态/过渡状态),为每个屏幕提供独立的生命周期管理:完全显示时用 RESUMED,过渡中用 STARTED,弹出时用 CREATE原创 2025-09-03 08:30:00 · 912 阅读 · 0 评论 -
深入理解 Compose 中的 LayoutNode:打造高效 UI 的基石
本文深入解析了Jetpack Compose中的核心组件LayoutNode。LayoutNode是所有可组合项的运行时表示,负责将UI描述转化为实际像素,构建持久的树结构映射UI层级。文章通过代码示例展示了Compose如何通过ReusableComposeNode实现节点复用,利用ComposeUiNode作为中间层隔离复杂度,最终由LayoutNode完成测量、布局等核心逻辑。同时对比了LayoutNode与Modifier.Node的分工:前者处理UI骨架和布局,后者管理交互行为。这种分层设计使Co原创 2025-09-01 08:30:00 · 993 阅读 · 0 评论 -
Jetpack Compose :使用 derivedStateOf 优化重组
Jetpack Compose中的derivedStateOf可以优化重组性能,避免不必要的重复计算。本文通过邮箱验证示例说明:当状态变化触发重组时,直接计算表达式会导致每次重组都重新执行逻辑。而使用derivedStateOf包裹计算逻辑后,Compose会缓存结果,仅在依赖的状态(如email)变化时才重新计算。文章深入解析了其内部原理:通过DerivedSnapshotState跟踪依赖项并缓存计算结果,避免无关重组时的重复计算。这种"记忆化计算"能显著提升复杂逻辑(如验证、筛选)原创 2025-08-29 01:15:55 · 1039 阅读 · 0 评论 -
理解 Compose 副作用 API:SideEffect
Jetpack Compose中的SideEffect是一个用于安全处理副作用的重要工具。它允许开发者在每次成功重组后执行非挂起代码,如日志记录、统计分析或与非Compose代码同步状态。与LaunchedEffect和DisposableEffect不同,SideEffect不会启动协程,而是将操作延迟到UI更新完成后执行。其内部机制通过Compose运行时记录副作用,并在重组后批量执行。这种设计确保了副作用不会干扰UI构建流程,同时保持代码的可预测性。适用于调试跟踪、状态同步等场景,是编写高效Compo原创 2025-08-26 08:30:00 · 1096 阅读 · 0 评论 -
Google I/O 2025 新发布的 Jetpack Navigation 3 有哪些核心变化
Jetpack Navigation 3在Google I/O 2025大会上发布,采用全新的返回栈操作模式。与旧版不同,Nav3要求开发者直接操作返回栈实现页面跳转,支持灵活添加/删除页面和类型安全的参数传递。新特性包括多返回栈管理、entryDecorators装饰器(可插入页面跳转逻辑)以及SceneStrategy大屏适配方案。虽然仍处于alpha阶段,但其简洁的API设计为复杂导航场景提供了更直观的控制方式。原创 2025-08-25 08:30:00 · 1377 阅读 · 0 评论 -
Jetpack Compose 智能重组与稳定性原理:打造高性能应用实践
本文深入解析了Jetpack Compose智能重组与稳定性的底层原理。Compose通过组合、布局、绘制三阶段渲染流程,在状态变化时触发智能重组,仅更新受影响部分。稳定性是性能优化的核心,编译器通过参数类型分析(包括基本类型、函数类型和特定类)决定重组范围。使用@Stable和@Immutable注解可显式标记稳定类型,其中@Immutable适用于完全不可变类,@Stable用于可变但能通知变化的类型。文章还探讨了Compose编译器如何将函数转换为Restartable(可重启)和Skippable(原创 2025-08-04 08:30:00 · 1300 阅读 · 0 评论 -
掌握 Jetpack Compose 稳定性:优化应用性能的全面指南
Jetpack Compose性能优化关键在于理解UI渲染机制和稳定性概念。文章首先解析了Compose的三大渲染阶段(组合、布局、绘制),然后重点探讨了重组机制及其触发因素。核心在于通过提升参数稳定性来优化性能:使用不可变数据结构、合理应用@Stable/@Immutable注解、避免不稳定类型参数、优化大型列表渲染以及实践状态提升策略。文章还提供了实战案例,展示如何将不稳定实现重构为稳定结构。掌握这些稳定性优化技巧,可有效减少不必要的重组,显著提升Compose应用性能。原创 2025-08-08 09:00:00 · 1006 阅读 · 0 评论 -
Jetpack Compose 集成 ExoPlayer 实战指南
本文介绍了如何在Jetpack Compose中集成ExoPlayer媒体播放器。ExoPlayer作为Google官方推荐的播放库,具有格式支持广泛、高度可定制、生命周期感知等优势。文章详细讲解了项目环境准备、结构设计以及依赖配置,采用Kotlin Gradle脚本和版本目录管理依赖。通过合理的项目分层,将UI、业务逻辑和状态管理分离,为后续构建专业级媒体播放体验奠定基础。原创 2025-07-28 11:45:00 · 1426 阅读 · 0 评论 -
迁移 Jetpack Compose Navigation 3 实战指南
Jetpack Compose Navigation 3 带来了显著的导航体验升级。本文详细介绍了从传统导航库迁移到 Nav3 的全过程,包括配置依赖、定义页面、迁移NavHost、导航操作及结果处理等关键步骤。Nav3 通过类型安全的 NavKey 接口、简化的状态管理、增强的返回栈控制等改进,大幅提升了导航的可靠性和开发体验。虽然仍处于 alpha 阶段,但其设计理念已展现出未来 Android 导航的发展方向。迁移过程中最突出的优势是编译时安全性、类型化参数传递和更直观的 API 设计,使开发者能够更原创 2025-07-31 08:30:00 · 2175 阅读 · 0 评论 -
Jetpack Compose 导航中的状态管理:跨屏幕数据共享最佳实践
本文深入探讨了Jetpack Compose导航中的状态管理最佳实践。针对常见的状态丢失、参数获取等问题,文章建议:使用ViewModel管理屏幕级状态和业务逻辑;通过SavedStateHandle安全处理导航参数;谨慎使用CompositionLocal共享环境上下文;结合rememberSaveable和rememberNavBackStack保留UI状态;将ViewModel提升至导航图级别实现跨屏幕状态共享。同时提醒开发者避免常见陷阱,如不合理初始化ViewModel、过度使用全局状态等,从而构建原创 2025-07-30 08:30:00 · 1048 阅读 · 0 评论 -
通过 8 张表全方位对比 Flutter & Compose
Flutter与Jetpack Compose对比:两大声明式UI框架解析 平台支持: Flutter跨平台(Android/iOS/Web/Desktop),使用Dart语言 Compose专注Android,使用Kotlin 核心差异: 架构:Flutter采用Widget树重建,Compose基于重组机制 渲染:Flutter自带Skia引擎,Compose使用系统Skia 状态管理:Compose的Snapshot系统更智能 关键指标: 性能:Compose冷启动更快,Flutter跨平台渲染更一致原创 2025-06-16 08:30:00 · 2076 阅读 · 0 评论 -
Google 发布的全新导航库:Jetpack Navigation 3
Jetpack Navigation 3(Nav3)是专为Jetpack Compose设计的全新导航库,解决了Nav2在大屏设备和现代开发模式中的局限性。Nav3采用开放透明的设计理念,将返回栈控制权完全交给开发者,支持自定义目标类型和状态管理。其关键特性包括内置过渡动画、自适应布局支持多窗格显示、状态作用域限定和模块化API设计。代码示例展示了如何通过简单操作状态列表实现导航,体现了Nav3的简洁性和灵活性。该库为Android应用开发提供了更现代化、可扩展的导航解决方案,特别适合适配多种设备形态的复杂原创 2025-06-02 15:48:13 · 2114 阅读 · 0 评论 -
2025 年 Google I/O 大会,Android 开发者需要关注这些内容...
2025年Google I/O大会聚焦Android开发生态的多维度升级:Jetpack Compose迎来自动填充、文本自适应等新功能,性能优化使卡顿率降低至0.1%,稳定性通过每日迭代测试显著提升;导航库Navigation 3和媒体组件完成Compose适配,实现更灵活的跨平台开发;Kotlin Multiplatform扩展至9个Jetpack库,支持业务逻辑跨Android/iOS共享;Android 16采用新发布节奏,引入可选SDK更新机制;安全方面强化了凭证管理、隐私沙箱和健康数据API,为原创 2025-05-25 09:00:00 · 2194 阅读 · 0 评论 -
Compose 副作用的 10 个使用误区与规避手段
本文探讨了在 Jetpack Compose 中管理副作用时常见的七个错误及其解决方法。这些错误包括:LaunchedEffect 的 key 不正确、错误地将 LaunchedEffect 与 MutableState 一起使用、错误使用 remember、未即时进行后处理、错误设置协程作用域、未正确处理配置变更以及将 SideEffect 用于业务逻辑。通过正确使用 LaunchedEffect、DisposableEffect、rememberUpdatedState 等工具,开发者可以避免这些错误,原创 2025-05-19 08:30:00 · 1043 阅读 · 0 评论 -
Compose 中动态修改 Lottie 动画主题颜色
Lottie 非常方便,因为它能嵌入设计师使用创作工具制作的动画。在 Android 官方(https://developer.android.com)给的 Compose 动画选型流程图中,对于由多个元素构成的复杂插画动画,也建议使用像 Lottie 这样的框架。当使用 Lottie 工具制作的动画时,我们有时也希望动态更改其中一部分,比如修改深色/浅色模式,适配夜间主题等。本文将通过示例,介绍如何调整 Lottie 动画内的颜色。原创 2025-04-23 08:30:00 · 1653 阅读 · 0 评论 -
了解 Compose 副作用 API 的实现原理
本文带大家详细研究了 Jetpack Compose 里最常用的三个主要副作用处理 API。在声明式 UI 的世界里,状态能影响到执行行为的方方面面,所以把副作用管理好,对保证任务能正确、可预测地执行,是非常关键的。原创 2025-04-22 08:15:00 · 1248 阅读 · 0 评论 -
2025 跨平台技术如何选:KMP 与 Flutter 的核心差异
跨平台技术的选择本质是组织能力的映射。KMP 像一位精通多国语言的外交官,在原生生态中游刃有余;Flutter 则像一位才华横溢的画家,用统一的笔触描绘多平台画卷。2025 年的今天,随着 Compose Multiplatform 的成熟和 Flutter 3.0 的性能突破,这场竞赛已不再是零和游戏——聪明的团队正在混合架构中寻找最优解,让每一行代码都在正确的位置发光。原创 2025-04-07 08:15:00 · 4818 阅读 · 0 评论 -
一文看懂 Jetpack Compose 布局流程
本文用通俗易懂的语言介绍 Jetpack Compose 的布局流程,涉及到 MeasurePolicy,Modifier,Constraints, Intrinsic measurement 等概念。原创 2024-12-09 08:00:00 · 1854 阅读 · 0 评论 -
深入浅出 Compose Compiler(2) 编译器前端检查
本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!原创 2024-10-21 08:30:00 · 1808 阅读 · 0 评论 -
一文看懂 Compose 强制跳过模式(Strong Skipping Mode)
强制跳过模式(Strong Skipping Mode)是一个小更新,但是其实影响深远,它有点像从“性本恶”到“性本善”的转变,认为不稳定类型的危害是可忽略的,当然它的开启会引入正确性风险,这也是为什么它经过了长期的实验验证后,才正式引入。经过实验和开发者反馈,证明它的引入是收到欢迎的。只要大家遵循好的编码习惯,不随意滥用不稳定性类型,鼓励打开强跳模式,会让 App 性能得到一个整体提升。原创 2024-10-09 08:30:00 · 1457 阅读 · 0 评论 -
Jetpack Compose 1.5 发布:全新 Modifier 系统助力性能提升
Jetpack Compose 1.5 发布,性能终于得到大幅提升,这得益于全新的 Modifier 实现方式原创 2023-09-11 08:30:00 · 2548 阅读 · 6 评论 -
深入浅出 Compose Compiler(1) Kotlin Compiler & KCP
Compose 的语法简洁、代码效率非常高,这主要得益于 Compose Compiler 的一系列编译期魔法,帮开发者生成了很多样板代码。但编译期插桩也阻碍了我们对于 Compose 运行原理的认知,想要真正读懂 Compose 就必须先了解它的 Compiler。本系列文章将带大家揭开 Compose Compiler 的神秘面纱。Compose 是一个 Kotlin Only 框架,所以 Compose Compiler 的本质是一个 KCP(Kotlin Compiler Plugin)。原创 2023-04-29 12:00:54 · 2526 阅读 · 4 评论 -
Jetpack Compose 中添加 click 事件的几种方法
Compose 中添加 click 有多总方法,本文做一个简单总结,包括 Modifier.clickable, combinedClickable, pointerInput, ViewConfiguration 等原创 2023-04-10 08:30:00 · 8212 阅读 · 1 评论 -
Compose 为什么可以跨平台?
Compose Multiplatform 本质上是一个 Kotlin 跨平台库。在各个平台共享 Compose Compiler 和 Compose Runtime原创 2022-12-26 11:52:37 · 3173 阅读 · 0 评论 -
Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析
rememberSaveable 可以帮助 Composable 在横竖屏切换甚至进程切换后恢复状态,这主要是通过 SaveableStateRegistry 实现的,在 Activity onSaveInstance 时通过 registry 收集我们需要保存的状态并写入 Bundle,待到下次 Activity 重新 onCreate 的时候恢复。原创 2022-10-24 09:00:00 · 2660 阅读 · 0 评论 -
Compose Compiler 与 Kotlin 的版本兼容性
有时 Android Studio 的 build.gradle 中会提示 Compose 有了新版本,但是如果升级不当可能会出现编译错误,比如下面这样的搭配就会出现 build error比如当我试图将 1.2.0-rc02 升级到 1.2.0 时,会发生以下编译错误原因是 Kotlin 与 Compose Compiler 版本不匹配。原创 2022-09-23 09:00:00 · 7542 阅读 · 5 评论 -
深入理解 Compose Navigation 实现原理
Compose 中的 NavHost 本质上是一个 Composable 函数,与中的同名接口没有派生关系,但职责是相似的,主要目的都是构建 NavGraph。NavGraph 创建后会被 NavController 持有并在导航中使用,因此 NavHost 接受一个 NavController 参数,并为其赋值 NavGraph//... //设置 NavGraph navController . graph = graph //... }...原创 2022-09-01 08:30:00 · 4547 阅读 · 4 评论 -
《Jetpack Compose 从入门到实战》带你踏上 Compose 开发之旅~
Jetpack Compose 从入门到实战,新书上架,谷歌开发者社区 & Kotlin中文社区 & Compose中文社区 联合推荐原创 2022-08-02 09:00:00 · 4278 阅读 · 7 评论 -
为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比
前面基于代码片段进行了一些对比,最后以CounterDemo为例,看一个完整功能下Flutter、Compose和Swift的代码对比,React与其他三者代码风格差异较大,就不参加比较了。FlutterComposeSwiftUI可以感觉到Compose代码最简洁也最直观,SwiftUI通过ViewBuilder机制也可以实现与Compose类似的DSL,表现也非常不错,Flutter由于模板代码较多,在简洁程度上表现最差。httpshttpshttps。...原创 2022-08-01 09:00:00 · 2670 阅读 · 6 评论 -
Compose 类型稳定性注解:@Stable & @Immutable
Compose会针对稳定类型进行编译期优化,通过对输入参数的比较跳过不必要的重组稳定类型包括所有的基本型、String类型、函数类型,以及符合以下条件的非基本类型非interface所有public属性均为final所有public属性均为稳定类型或者MutableState通过添加@Stable或者@Immutable注解可以提升重组性能,注解的使用要慎重跨Module引用数据类型时,需要通过辅助手段提升其稳定性。...原创 2022-07-28 09:00:00 · 5286 阅读 · 6 评论
分享