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 随笔 0
Material Design 3 的更新,视觉规范又变了 Material Design 3 的更新,视觉规范又变了 「Material Design 3 的更新,视觉规范又变了」 Google I/O 2024 之后,Material Design 3 又推了一波更新。我盯着那篇官方博客看了三遍,确认自己没穿越回 2021 年。当年 Material Y 2026-06-15 随笔 0
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
Bugsnag 的错误聚合分析,堆栈可读性 Bugsnag 的错误聚合分析,堆栈可读性 Bugsnag 的错误聚合分析,堆栈可读性 从一次 Native Crash 的排查说起 去年维护一个包含大量 C++ 代码的 Android 项目时,我遇到了一个让人头疼的问题。线上 Firebase Crashlytics 报告显示某类崩溃发生了 12 2026-06-13 tool 2
CountDownLatch 和 CyclicBarrier,并发工具怎么选 CountDownLatch 和 CyclicBarrier,并发工具怎么选 「CountDownLatch 和 CyclicBarrier,并发工具怎么选」 去年维护一个埋点上报模块的时候,我踩了个坑。场景很简单:App 启动时需要并行拉取三个配置项(AB 实验、远程开关、运营弹窗),全部完成后才 2026-06-13 Android 2
MediaStore 的日期查询索引,为什么有时候会慢 MediaStore 的日期查询索引,为什么有时候会慢 MediaStore 的日期查询索引,为什么有时候会慢 去年维护一个相册应用时,我接手了一个历史遗留的查询优化任务。用户反馈在照片数量超过两万张后,按日期浏览的加载时间从毫秒级跌到了秒级,甚至偶尔触发 ANR。初步排查时,我本能地怀疑是 Rec 2026-06-13 Android 1