RecyclerView 的 ConcatAdapter,不同布局类型的合并实践 RecyclerView 的 ConcatAdapter,不同布局类型的合并实践 RecyclerView 的 ConcatAdapter,不同布局类型的合并实践 RecyclerView 的多类型布局一直是个老话题。从早期在单个 Adapter 里写一堆 getItemViewType() 的 s 2026-06-16 Android 0
MockK 和 Mockito 的对比,Kotlin 项目怎么选 MockK 和 Mockito 的对比,Kotlin 项目怎么选 MockK 和 Mockito 的对比,Kotlin 项目怎么选 从一个编译错误说起 去年迁移一个老项目到 Kotlin 1.9 的时候,我遇到了一个挺典型的 Mockito 报错。大概长这样: org.mockito.excepti 2026-06-16 tool 0
ActivityResultContracts 替代 startActivityForResult,迁移成本 ActivityResultContracts 替代 startActivityForResult,迁移成本 ActivityResultContracts 替代 startActivityForResult,迁移成本 那个被标记为废弃的 API AndroidX Activity 1.2.0 开始 2026-06-15 Android 0
Room 的多表关联查询,@Relation 的 N+1 问题 Room 的多表关联查询,@Relation 的 N+1 问题 「Room 的多表关联查询,@Relation 的 N+1 问题」 去年维护一个本地缓存模块的时候,我踩到了 Room 的 @Relation 注解埋下的一个性能坑。当时的需求不算复杂:一个新闻 App 的离线阅读功能,文章表和标签表多 2026-06-15 Android 0
Realm 数据库的现状,迁移到 Room 的经验 Realm 数据库的现状,迁移到 Room 的经验 Realm 数据库的现状,迁移到 Room 的经验 Realm 的收购与社区冷却 2020 年 MongoDB 宣布收购 Realm,这件事在当时看起来像是 NoSQL 移动数据库的一次胜利。Realm 的 GitHub 仓库 star 数一度接近 2026-06-15 tool 0
Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin 从 Kotlin/JS 的"二等公民"说起 JetBrains 在 2021 年把 Kotlin 的 WebAssembly 支持搬上台面的时候,很多人第一反应是:终于不用 2026-06-15 随笔 1
Material Design 3 的更新,视觉规范又变了 Material Design 3 的更新,视觉规范又变了 「Material Design 3 的更新,视觉规范又变了」 Google I/O 2024 之后,Material Design 3 又推了一波更新。我盯着那篇官方博客看了三遍,确认自己没穿越回 2021 年。当年 Material Y 2026-06-15 随笔 1
NinePatch 的绘制原理,还能用多久 NinePatch 的绘制原理,还能用多久 NinePatch 的绘制原理,还能用多久 Android 开发里有个老东西,从 1.0 时代活到现在,几乎每个项目都用过,但真去深究它怎么工作的开发者没几个。NinePatch,就是那个 .9.png 后缀的图,Google 官方文档叫它 "nine-p 2026-06-15 tool 0
KMP 跨平台共享代码,现在能共享多少 KMP 跨平台共享代码,现在能共享多少 KMP 跨平台共享代码,现在能共享多少 从一条 Gradle 配置说起 去年秋天我在一个老项目里尝试接入 Kotlin Multiplatform,起因很实际:Android 端有一套复杂的离线同步逻辑,大概八千行 Kotlin 代码,iOS 团队用 Swif 2026-06-13 随笔 2