Android Jetpack
文章平均质量分 94
fundroid
Android GDE(谷歌开发者专家)| 互联网大厂移动端架构师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android 架构 15 年:7 个阶段的完整演进之路
Android架构演进综述(2010-2025) 本文系统梳理了Android架构10余年发展历程,划分为7个关键阶段: 混沌期(2010-2013):无架构模式,Activity/Fragment堆积业务逻辑,导致代码臃肿、难以维护 MVP时代(2013-2016):引入分层思想,分离视图与业务逻辑,但仍存在回调嵌套和内存泄漏问题 Clean架构(2014-2017):采用分层架构+Dagger依赖注入,实现业务与框架解耦 MVVM革命(2016-2019):ViewModel+LiveData组合,配合原创 2025-12-15 08:30:00 · 869 阅读 · 0 评论 -
Kotlin 协程避坑指南:GlobalScope vs Application Scope怎么选?
摘要: Kotlin协程中,GlobalScope因脱离生命周期管理易导致内存泄漏、UI异常等问题,而自定义的Application Scope绑定应用生命周期更安全可靠。GlobalScope的缺陷包括:与UI生命周期脱节、进程级存活造成资源浪费、缺乏结构化并发管理、测试困难等。正确做法是在自定义Application类中创建SupervisorJob作用域,通过onTerminate()统一取消协程,确保应用退出时资源释放。Application Scope既能全局调用,又可避免GlobalScope的原创 2025-12-01 08:15:00 · 654 阅读 · 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 · 836 阅读 · 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 · 564 阅读 · 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 · 633 阅读 · 0 评论 -
Android 架构之争:MVI 真的比 MVVM 更胜一筹吗?
Jetpack Compose 时代下 MVVM 与 MVI 的架构之争 摘要:随着 Jetpack Compose 的普及,关于 MVVM 和 MVI 架构的争论再起。本文通过历史溯源和实践对比,指出 MVVM 在大多数场景下已足够: 历史发展显示 MVVM 已演进为单一状态+UDF 模式 实践案例表明 MVI 容易陷入"上帝Reducer"陷阱,而MVVM能更简洁实现相同效果 简单页面用MVI会过度设计,复杂页面通过合理划分作用域后MVVM也能胜任 现代MVVM已具备MVI的核心优势原创 2025-10-14 08:30:00 · 1628 阅读 · 0 评论 -
掌握 Compose 性能优化三步法:从问题诊断到实战解决
摘要: 本文系统解析了Jetpack Compose的性能优化策略。通过Layout Inspector和稳定性报告诊断重组问题,深入分析Compose的智能重组机制与参数稳定性规则。提出四大优化工具:升级工具链启用强重组、全局稳定性配置、手动注解标记稳定类型、包装类处理特殊场景。最后强调验证优化效果并建立团队规范,确保Compose应用高效运行。文章结合代码实例,为开发者提供从问题定位到解决方案的完整指南,帮助平衡开发效率与应用性能。原创 2025-10-07 10:39:06 · 880 阅读 · 0 评论 -
初探 Navigation 3 嵌套路由:开启更高效的导航之旅
本文介绍了Navigation 3嵌套路由的使用方法,重点讲解了如何通过FragmentContainerView、Material 3的BottomNavigation和嵌套导航图来构建清晰易管理的导航系统。内容包括基础容器配置、现代导航栏实现以及模块化导航图的构建技巧,展示了如何通过分层设计简化复杂场景下的导航逻辑,提高代码可维护性。文章还提供了详细的代码示例,帮助开发者快速上手Navigation 3的嵌套路由功能。原创 2025-09-28 08:30:00 · 1675 阅读 · 0 评论 -
基于 Android Jetpack 构建离线优先(Offline-First)应用
构建离线优先的移动应用需要综合运用本地存储、后台同步和分页加载技术。使用Room实现数据本地存储,确保应用在网络断开时仍能访问数据;通过WorkManager智能调度后台任务,在网络恢复时自动同步数据;采用Paging 3实现高效的分页加载,提升大数据量场景下的用户体验。这种技术组合能有效解决网络不稳定问题,使应用具备更可靠的离线运行能力,同时优化性能和电池效率。原创 2025-09-24 08:30:00 · 787 阅读 · 0 评论 -
Compose State 几个常见使用误区与推荐做法
本文探讨了Jetpack Compose中状态管理的常见问题及解决方案。主要问题包括:表单数据在设备旋转时丢失、列表滚动位置重置、跨屏幕导航状态丢失以及不必要的重组。对应的解决方案包括:使用rememberSaveable保存表单状态,为列表项添加稳定键(key),通过ViewModel共享导航状态,以及使用derivedStateOf优化重组性能。文章通过具体代码示例展示了如何正确管理Compose应用中的状态,确保用户体验的连贯性和应用的性能优化。这些实践对构建稳定高效的Compose应用至关重要。原创 2025-09-16 08:30:00 · 628 阅读 · 0 评论 -
Jetpack Compose 流式布局(Flow Layout)全解析
Jetpack Compose 的流式布局(FlowRow/FlowColumn)为构建响应式UI提供了强大支持。与标准布局不同,流式布局能在空间不足时自动换行,特别适合标签、筛选器等需要动态排版的UI组件。相比惰性布局(LazyRow/LazyColumn),它更适合处理固定数量、数量较少的项目,会一次性渲染所有子项。开发者可通过权重(weight)、对齐方式(align)和最大项目数(maxItemsInEachRow/Column)等参数精细控制布局,还能创建类网格结构。流式布局的主轴和交叉轴排列方式原创 2025-09-08 08:30:00 · 1118 阅读 · 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 · 1374 阅读 · 0 评论 -
架构实战:用 Clean 和 SOLID 守护你的 Android 架构
摘要: Android开发中,忽视架构设计会导致代码臃肿、难以维护。关注点分离是核心原则,需将应用分为展示层(UI)、领域层(业务逻辑)和数据层(数据源)。以电商订单页为例,若将网络请求、业务逻辑和UI操作全塞进Activity,会导致代码脆弱、难测试且无法复用。例如,后端迁移至GraphQL或适配Wear OS时,紧耦合的代码将被迫重构。采用Clean Architecture与SOLID原则分层设计,能提升扩展性、维护性,避免需求变更引发的灾难性重构。原创 2025-09-05 08:30:00 · 1769 阅读 · 0 评论 -
全新 LifecycleOwner 可组合项:让 Composable 具备独立生命周期
AndroidX Lifecycle 2.10.0-alpha01 引入了可组合的 LifecycleOwner,解决了共享生命周期在屏幕过渡时的问题。现有方案通过 LocalLifecycleOwner 共享 Activity 的全局生命周期,导致过渡期间新旧屏幕同时处于 RESUMED 状态,引发资源浪费。新方案通过 NavLocalProvider 动态计算屏幕状态(返回栈状态/过渡状态),为每个屏幕提供独立的生命周期管理:完全显示时用 RESUMED,过渡中用 STARTED,弹出时用 CREATE原创 2025-09-03 08:30:00 · 785 阅读 · 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 · 852 阅读 · 0 评论 -
Jetpack Compose :使用 derivedStateOf 优化重组
Jetpack Compose中的derivedStateOf可以优化重组性能,避免不必要的重复计算。本文通过邮箱验证示例说明:当状态变化触发重组时,直接计算表达式会导致每次重组都重新执行逻辑。而使用derivedStateOf包裹计算逻辑后,Compose会缓存结果,仅在依赖的状态(如email)变化时才重新计算。文章深入解析了其内部原理:通过DerivedSnapshotState跟踪依赖项并缓存计算结果,避免无关重组时的重复计算。这种"记忆化计算"能显著提升复杂逻辑(如验证、筛选)原创 2025-08-29 01:15:55 · 942 阅读 · 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 · 1248 阅读 · 0 评论 -
Kotlin 上下文参数(Context Parameters):特性介绍与最佳实践
Kotlin 2.2.0 正式引入上下文参数(Context Parameters)特性,这是对1.6.20实验性功能"上下文接收器"的重大改进。该特性允许函数声明多个命名作用域参数,通过context()语法指定,在需要特定上下文的场景下特别有用。本文通过五个典型应用场景展示了其价值:1)组合多个上下文;2)与协程作用域集成;3)实现轻量级依赖注入;4)创建事务性作用域;5)构建DSL时保持简洁语法。相比实验阶段的上下文接收器,新版本强制命名参数,提高了代码可读性,同时可以通过&quo原创 2025-08-11 08:30:00 · 853 阅读 · 0 评论 -
Jetpack Compose 智能重组与稳定性原理:打造高性能应用实践
本文深入解析了Jetpack Compose智能重组与稳定性的底层原理。Compose通过组合、布局、绘制三阶段渲染流程,在状态变化时触发智能重组,仅更新受影响部分。稳定性是性能优化的核心,编译器通过参数类型分析(包括基本类型、函数类型和特定类)决定重组范围。使用@Stable和@Immutable注解可显式标记稳定类型,其中@Immutable适用于完全不可变类,@Stable用于可变但能通知变化的类型。文章还探讨了Compose编译器如何将函数转换为Restartable(可重启)和Skippable(原创 2025-08-04 08:30:00 · 1161 阅读 · 0 评论 -
掌握 Jetpack Compose 稳定性:优化应用性能的全面指南
Jetpack Compose性能优化关键在于理解UI渲染机制和稳定性概念。文章首先解析了Compose的三大渲染阶段(组合、布局、绘制),然后重点探讨了重组机制及其触发因素。核心在于通过提升参数稳定性来优化性能:使用不可变数据结构、合理应用@Stable/@Immutable注解、避免不稳定类型参数、优化大型列表渲染以及实践状态提升策略。文章还提供了实战案例,展示如何将不稳定实现重构为稳定结构。掌握这些稳定性优化技巧,可有效减少不必要的重组,显著提升Compose应用性能。原创 2025-08-08 09:00:00 · 840 阅读 · 0 评论 -
Jetpack Compose 集成 ExoPlayer 实战指南
本文介绍了如何在Jetpack Compose中集成ExoPlayer媒体播放器。ExoPlayer作为Google官方推荐的播放库,具有格式支持广泛、高度可定制、生命周期感知等优势。文章详细讲解了项目环境准备、结构设计以及依赖配置,采用Kotlin Gradle脚本和版本目录管理依赖。通过合理的项目分层,将UI、业务逻辑和状态管理分离,为后续构建专业级媒体播放体验奠定基础。原创 2025-07-28 11:45:00 · 1130 阅读 · 0 评论 -
迁移 Jetpack Compose Navigation 3 实战指南
Jetpack Compose Navigation 3 带来了显著的导航体验升级。本文详细介绍了从传统导航库迁移到 Nav3 的全过程,包括配置依赖、定义页面、迁移NavHost、导航操作及结果处理等关键步骤。Nav3 通过类型安全的 NavKey 接口、简化的状态管理、增强的返回栈控制等改进,大幅提升了导航的可靠性和开发体验。虽然仍处于 alpha 阶段,但其设计理念已展现出未来 Android 导航的发展方向。迁移过程中最突出的优势是编译时安全性、类型化参数传递和更直观的 API 设计,使开发者能够更原创 2025-07-31 08:30:00 · 1728 阅读 · 0 评论 -
Jetpack Compose 导航中的状态管理:跨屏幕数据共享最佳实践
本文深入探讨了Jetpack Compose导航中的状态管理最佳实践。针对常见的状态丢失、参数获取等问题,文章建议:使用ViewModel管理屏幕级状态和业务逻辑;通过SavedStateHandle安全处理导航参数;谨慎使用CompositionLocal共享环境上下文;结合rememberSaveable和rememberNavBackStack保留UI状态;将ViewModel提升至导航图级别实现跨屏幕状态共享。同时提醒开发者避免常见陷阱,如不合理初始化ViewModel、过度使用全局状态等,从而构建原创 2025-07-30 08:30:00 · 899 阅读 · 0 评论 -
聊聊 MVI 的发展史和现代 Android 实践
MVI架构演进与应用探索 摘要: MVI(Model-View-Intent)架构模式是Android开发中经过长期演进而成的重要解决方案。本文将梳理MVI从1979年MVC到2014年Flux,再到2015年MVI正式提出的发展历程,揭示其核心思想源于响应式编程和单向数据流理念。文章重点澄清了两个常见误区:MVI≠Redux(前者是分布式状态管理,后者是集中式),MVI≠MVVM(关键区别在于状态管理和数据流方向)。通过对比分析,指出MVI更适合需要严格状态管理的场景,而开发者应根据实际需求选择架构,而非原创 2025-06-23 08:15:00 · 1420 阅读 · 0 评论
分享