- 博客(328)
- 收藏
- 关注

原创 《Jetpack Compose 从入门到实战》带你踏上 Compose 开发之旅~
Jetpack Compose 从入门到实战,新书上架,谷歌开发者社区 & Kotlin中文社区 & Compose中文社区 联合推荐
2022-08-02 09:00:00
3819
7
原创 多 ViewModel 间代码复用最佳实践
为每个 ViewModel 创建一个接口。接口有两个属性,分别是 ViewModel 和 Repository。另外为每个 Action 类型都实现了一个单独的函数,每个函数的功能更具体。类继承:简单,但是有单继承限制辅助类:简单,但缺少重写灵活性。类委托:无法通过this提供 ViewModel 能力。接口默认函数:综合表现最好。特性类继承辅助类类委托接口默认函数可多继承❌✅✅✅可重写性✅❌✅✅VM可访问✅✅❌✅推荐场景。
2025-05-04 01:39:44
787
原创 SOLID 设计原则在 Android 中的实战应用
传统方式中,我们经常会在 ViewModel 中依赖一个具体 UseCase,当我们需要升级依赖时,则必须修改 ViewModel 代码,违反开闭原则。而通过自定义 ViewModelFactory 和依赖注入,我们可以实现对扩展开放,对修改关闭。当有新需求,要求更新 UseCase 依赖时,我们通过创建新的 UseCase 实例并传递给工厂,以此来扩展 ViewModel 的功能(对扩展开放),而不需要修改 ViewModel 类本身(对修改关闭)。
2025-05-02 23:01:19
583
原创 Kotliln 协程打造内存缓存
很多场景下都会使用到内存缓存。比如官方推荐使用 Repository 模式封装 API 请求,Repository 内部使用数据库搭建本地持久化缓存,减少网络请求的等待。在持久化存存储之外,还可以增加一层内存缓存,这比访问本地数据库还要快的多。内存缓存的类随处可见,比如 Guava,Jetpack 等提供了对应的 Cache 类。本文基于 Kotlin 协程带你一步步实现自己的内存缓存。
2025-04-24 08:15:00
845
原创 Compose 中动态修改 Lottie 动画主题颜色
Lottie 非常方便,因为它能嵌入设计师使用创作工具制作的动画。在 Android 官方(https://developer.android.com)给的 Compose 动画选型流程图中,对于由多个元素构成的复杂插画动画,也建议使用像 Lottie 这样的框架。当使用 Lottie 工具制作的动画时,我们有时也希望动态更改其中一部分,比如修改深色/浅色模式,适配夜间主题等。本文将通过示例,介绍如何调整 Lottie 动画内的颜色。
2025-04-23 08:30:00
1019
原创 了解 Compose 副作用 API 的实现原理
本文带大家详细研究了 Jetpack Compose 里最常用的三个主要副作用处理 API。在声明式 UI 的世界里,状态能影响到执行行为的方方面面,所以把副作用管理好,对保证任务能正确、可预测地执行,是非常关键的。
2025-04-22 08:15:00
944
原创 ConnectivityManager + Flow 打造 Android 网络状态检测器
Android 应用开发中,经常有需要确保在网络切换或连接丢失时能正确运行。而这个系统服务,是我们管理网络连接的得力助手,配合 Flow 使用实时监听网络状态,保证用户体验的流畅性。
2025-04-21 08:15:00
612
原创 Kotlin 协程面试题:使用 Dispachers.IO 要注意什么
在 Review 代码时经常看到这样的写法代码本意是想在把一些非UI任务放到后台,避免阻塞UI。但有时候开发者会忽略任务类型(CPU 密集型 or IO 密集型),滥用 Dispacher.IO 是不合理的。
2025-04-15 08:30:00
357
原创 Vibe Coding 白皮书:技术平权时代的到来
Vibe Coding 由前 OpenAI 研究员 Andrej Karpathy 在 2025 年初提出,国内翻译为“氛围编程”。Vibe Coding 利用AI工具(如GPT、Claude等)辅助生成代码、构建应用程序的协作模式。开发者通过自然语言描述需求,AI 工具自动生成代码。自2024年第三代推理模型(如Sonnet 3.5、Claude 3.1 Pro)出现后,AI生成代码的准确率从2023年的60%跃升至2025年的85%以上。开发者通过自然语言指令即可完成 80% 的基础编码工作。
2025-04-14 08:15:00
1300
原创 如何正确释放 Closeable 资源:切忌滥用 use 函数
use ()函数确实能保证可关闭资源正常关闭,但它没解决资源初始化的问题,也没法保证资源肯定是在use ()代码块里用的。这就得开发者自己注意这些关键步骤,就很容易出岔子,导致资源泄漏。每个Closeable资源的手动实例化都可能导致资源泄漏。我们可以封装自定义作用域函数来减少错误写法的可能。如下作用域函数的概念大家应该知道了(例如等),简单说定义一个参数为 lambda 的函数,提供一个面相某context 的作用域// ...// ...// ...// ...以上这些写法理论上都可行。
2025-04-08 08:30:00
478
原创 2025 跨平台技术如何选:KMP 与 Flutter 的核心差异
跨平台技术的选择本质是组织能力的映射。KMP 像一位精通多国语言的外交官,在原生生态中游刃有余;Flutter 则像一位才华横溢的画家,用统一的笔触描绘多平台画卷。2025 年的今天,随着 Compose Multiplatform 的成熟和 Flutter 3.0 的性能突破,这场竞赛已不再是零和游戏——聪明的团队正在混合架构中寻找最优解,让每一行代码都在正确的位置发光。
2025-04-07 08:15:00
1267
原创 Android 基于 ContentObserver 监听用户截屏
很多应用在当你截屏的时候能够感知到,并提示你是否要发送截屏等等。Andorid 官方 API 没有检测截屏的能力,但有一些变通的办法能够检测用户在使用应用时是否进行了截屏操作。本文将探讨如何实现这一功能。思路非常简单:用户使用 App 期间,监听用户设备中的图片,查看 “截屏” 文件夹中是否新增了图片。
2025-04-01 08:30:00
368
原创 如何使用 Trae 开发 Android
在AI技术深度改变软件工程实践的当下,字节跳动推出的 Trae AI以"人机协同"为核心定位,正在重塑 Android 开发者的工作流。作为国内首个 AI 原生 IDE,其核心价值不仅在于代码生成能力,更体现在对开发全链路的智能化重构。本文将以功能模块解析+场景化案例的形式,系统性拆解 Trae 对 Android 开发者的赋能路径。
2025-03-31 09:30:00
1939
原创 Rust 为什么不适合开发 GUI
在当今科技蓬勃发展的时代,Rust 编程语言正崭露头角,逐步为世界上诸多重要基础设施提供动力支持。从存储海量信息到应用于 Linux 内核,Rust 展现出强大的实力。然而,当涉及构建 GUI(图形用户界面)时,Rust 却面临着诸多挑战。据数据显示,超过 56% 的 Rust 开发者认为其 GUI 开发亟待大幅改进,这也是许多人起初不愿采用 Rust 进行相关开发的重要原因。
2025-03-30 15:24:44
1419
原创 万物皆可“吉卜力”,使用 AI 创建你的作品
GPT-4o 图片生成功能爆火 你是否曾梦想创作属于自己的吉卜力风格作品?借助人工智能的力量,现在只需轻点几下鼠标,你就能创作出令人惊叹的、受吉卜力启发的艺术作品!
2025-03-29 21:27:28
2490
原创 一文看懂 Jetpack Compose 布局流程
本文用通俗易懂的语言介绍 Jetpack Compose 的布局流程,涉及到 MeasurePolicy,Modifier,Constraints, Intrinsic measurement 等概念。
2024-12-09 08:00:00
1283
原创 深入浅出 Compose Compiler(2) 编译器前端检查
本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!
2024-10-21 08:30:00
1615
原创 一文看懂 Compose 强制跳过模式(Strong Skipping Mode)
强制跳过模式(Strong Skipping Mode)是一个小更新,但是其实影响深远,它有点像从“性本恶”到“性本善”的转变,认为不稳定类型的危害是可忽略的,当然它的开启会引入正确性风险,这也是为什么它经过了长期的实验验证后,才正式引入。经过实验和开发者反馈,证明它的引入是收到欢迎的。只要大家遵循好的编码习惯,不随意滥用不稳定性类型,鼓励打开强跳模式,会让 App 性能得到一个整体提升。
2024-10-09 08:30:00
1186
原创 盘点 2024 Google I/O 中的 Android 方向关键更新
AI 是 2024 年 Google I/O 焦点,本次大会 Android 的许多 topic 也离不开与 AI 的碰撞,例如 Gemini 如何助力 Android 应用开发等。AI 之外也有很多 Android 独有话题,例如如何帮助开发者低成本构建跨设备应用、如何提升研发效率等。本文将带大家盘点本次 I/O 大会最值得 Android 开发者关注的 15 个关键进展。
2024-06-09 10:42:22
1146
1
原创 Android 架构 UseCase最佳实践
Android 官方的最新架构中引入了 Domain (网域层 or 领域层),Domain Layer 由一个个 UseCase 组成。但是由于团队套用官方新架构后没有正确地定义 UseCase,无法发挥 Domain Layer 应有的架构价值。本文就带大家一起梳理 UseCase 常见的使用误区和最佳实践。
2024-05-28 14:46:45
2040
1
原创 Jetpack Compose 1.5 发布:全新 Modifier 系统助力性能提升
Jetpack Compose 1.5 发布,性能终于得到大幅提升,这得益于全新的 Modifier 实现方式
2023-09-11 08:30:00
2267
6
原创 从 Compnent Tree 视角看 Dagger 到 Hilt 的演变
Dagger 的本质是一棵组件树,而 dagger.android 和 Hilt 的诞生目的,都是通过不同的手段降低组件树的构建成本,减少模板代码。
2023-07-11 09:00:00
586
原创 Kotlin 1.9 新特性预览:data object (数据单例)
data object 数据单例是 Kotlin 1.9 中预定引入的新特性 ,但其实从 1.7.20 开始就可以预览了。接下来让我们看看它有哪些特点。
2023-07-04 08:30:00
2720
原创 Android 官方架构中的 UseCase 该怎么写?
如上所述,官方文档虽然对 UseCase 给出了一些基本定义,但是毕竟是一个新新生概念,很多人在真正去写代码的时候仍然会感觉不清晰,缺少有效指引。在究竟如何定义 UseCase 这个问题上,还有待大家更广泛的讨论,形成可参考的共识。本文也是带着这个目的而生,算是抛砖引玉吧。考虑到架构的扩展性,推荐在 ViewModel 与 Repository 之间强制引入 UseCase,即使当前的业务逻辑不复杂。
2023-05-24 09:00:00
1900
原创 Studio Bot - 让 AI 帮我写 Android 代码
Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了Studio bot功能,希望通过 AI 帮助开发者更轻松地写代码:Studio Bot 使用谷歌编码基础模型Codey(后者基于最新 PaLM2 大语言模型)帮助开发者生成程序代码,提升生产力。我们还可以向 Studio Bot 询问有关 Android 开发的知识,或者帮助修复当前代码中的错误。
2023-05-12 09:00:00
5246
原创 深入浅出 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
2087
5
原创 Jetpack Compose 中添加 click 事件的几种方法
Compose 中添加 click 有多总方法,本文做一个简单总结,包括 Modifier.clickable, combinedClickable, pointerInput, ViewConfiguration 等
2023-04-10 08:30:00
6929
1
原创 CameraX + MLKit 打造超简单 OCR 方案
Android 自 5.0 开始引入了全新的相机框架 Camera2 ,相较于之前的 Camera1 对多摄像头的支持更加友好,功能更加强大,但使用成本也更高。此背景下谷歌发布了 CameraX,它基于 Camera2 封装,大大提高了 API 的易用性。我们可以用很少的代码搭建出面向特定场景的相机应用,OCR 就是一种典型的相机应用场景。CameraX 引入 UseCase 的概念完成各种相机能力,UseCase 有利于功能模块的解耦,聚焦特定领域进行功能开发。
2023-02-01 08:30:00
2754
原创 Android Studio 支持安卓手机投屏
当我们需要手机投屏时会使用到 ApowerMirror,LetsView,Vysor,Scrcpy 等工具。如果你是安卓手机,现在可以使用 Android Studio 进行投屏
2023-01-19 01:16:55
12462
原创 Compose 为什么可以跨平台?
Compose Multiplatform 本质上是一个 Kotlin 跨平台库。在各个平台共享 Compose Compiler 和 Compose Runtime
2022-12-26 11:52:37
2556
原创 Compose 横竖屏切换时状态如何保存?rememberSaveable 实现原理分析
rememberSaveable 可以帮助 Composable 在横竖屏切换甚至进程切换后恢复状态,这主要是通过 SaveableStateRegistry 实现的,在 Activity onSaveInstance 时通过 registry 收集我们需要保存的状态并写入 Bundle,待到下次 Activity 重新 onCreate 的时候恢复。
2022-10-24 09:00:00
2399
原创 终于懂了~ 图解 SharedFlow 缓存系统
图解 MutableSharedFlow 的 replay ,extraBufferCapacity,onBufferOverflow 等参数,深入理解 SharedFlow 的缓存系统
2022-10-07 10:00:00
3412
原创 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
6622
5
原创 深入理解 Compose Navigation 实现原理
Compose 中的 NavHost 本质上是一个 Composable 函数,与中的同名接口没有派生关系,但职责是相似的,主要目的都是构建 NavGraph。NavGraph 创建后会被 NavController 持有并在导航中使用,因此 NavHost 接受一个 NavController 参数,并为其赋值 NavGraph//... //设置 NavGraph navController . graph = graph //... }...
2022-09-01 08:30:00
3905
5
原创 Gradle Sync Error : ANDROID_HOME 与 ANDROID_SDK_ROOT 指向不一致
Several environment variables and/or system properties contain different paths to the SDK.Please correct and use only one way to inject the SDK location.
2022-08-23 08:30:00
3055
原创 为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比
前面基于代码片段进行了一些对比,最后以CounterDemo为例,看一个完整功能下Flutter、Compose和Swift的代码对比,React与其他三者代码风格差异较大,就不参加比较了。FlutterComposeSwiftUI可以感觉到Compose代码最简洁也最直观,SwiftUI通过ViewBuilder机制也可以实现与Compose类似的DSL,表现也非常不错,Flutter由于模板代码较多,在简洁程度上表现最差。httpshttpshttps。...
2022-08-01 09:00:00
2386
6
原创 Compose 类型稳定性注解:@Stable & @Immutable
Compose会针对稳定类型进行编译期优化,通过对输入参数的比较跳过不必要的重组稳定类型包括所有的基本型、String类型、函数类型,以及符合以下条件的非基本类型非interface所有public属性均为final所有public属性均为稳定类型或者MutableState通过添加@Stable或者@Immutable注解可以提升重组性能,注解的使用要慎重跨Module引用数据类型时,需要通过辅助手段提升其稳定性。...
2022-07-28 09:00:00
4583
6
原创 Fragment 这些 API 已废弃,你还在使用吗?
盘点 Fragment 被废弃的 API:onActivityCreated,startActivityForResult,setTargetFragment,setRetainInsInstance
2022-07-18 09:00:00
1841
原创 深入理解 Jetpack Compose 内核:SlotTable 系统
Compose 的绘制有三个阶段,组合 > 布局 > 绘制。从组合到上屏的一系列过程中主要是依靠 SlotTable 系统来完成,SlotTable 记录了 Composiiton 的状态,当 SlotTable 的状态发生变化时,会触发 LayoutNode 树的更新,实现 UI 重新渲染。......
2022-06-27 15:28:22
2759
5
空空如也
Android 项目编译过程,Gradle报如下错误,如何解决?
2025-05-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人