Lint 自定义规则开发,我写完的第一条规则 Lint 自定义规则开发,我写完的第一条规则 Lint 自定义规则开发,我写完的第一条规则 从一次代码审查的重复劳动说起 去年下半年我们团队做了一次模块化重构,把原本耦合在 App 模块里的网络请求逻辑拆到了独立的 network 模块里。拆完之后我负责审查迁移后的代码,结果连续三天都在做同一件事: 2026-06-10 Android 2
ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 Android 开发者对 ViewModel 的熟悉程度大概仅次于 Activity 和 Fragment,但 SavedStateHand 2026-06-09 Android 3
AtomicFU 的无锁并发,替代 synchronized 的场景 AtomicFU 的无锁并发,替代 synchronized 的场景 AtomicFU 的无锁并发,替代 synchronized 的场景 从一段性能测试的异常数据说起 去年在做 Kotlin 协程的通道(Channel)性能基准测试时,我遇到了一个反直觉的结果。测试场景很简单:两个线程通过 Cha 2026-06-08 Android 1
Tile Service 开发:快速设置面板的小组件 Tile Service 开发:快速设置面板的小组件 Tile Service 开发:快速设置面板的小组件 从 NotificationListener 的权限噩梦逃过来 去年做系统工具类应用时,我被 NotificationListenerService 的权限申请流程折磨得够呛。用户得跳转到系统 2026-06-08 Android 2
Firebase Performance Monitoring,采集开销实测 Firebase Performance Monitoring,采集开销实测 「Firebase Performance Monitoring,采集开销实测」 Firebase Performance Monitoring 在 Android 社区里的存在感一直有点微妙。官方文档把它包装成"开箱即用 2026-06-06 Android 4
Zygote 的预加载优化,对 App 启动的影响 Zygote 的预加载优化,对 App 启动的影响 Zygote 的预加载优化,对 App 启动的影响 Android 应用的冷启动速度,很大程度上取决于 Zygote 进程的分叉效率。这个结论在官方文档里被反复提及,但具体到实际项目中,Zygote 预加载的类列表到底该怎么调整、能省多少毫秒、会不 2026-06-06 Android 4
Retrofit 的自定义 Converter,写一个没那么难 Retrofit 的自定义 Converter,写一个没那么难 Retrofit 的自定义 Converter,写一个没那么难 Retrofit 的 Converter 机制被很多人视为黑盒。官方文档里轻描淡写一句 "addConverterFactory",Stack Overflow 上搜到的答 2026-06-04 Android 3
Biometric 指纹认证的不同安全等级,怎么选 Biometric 指纹认证的不同安全等级,怎么选 Biometric 指纹认证的不同安全等级,怎么选 Android 的 Biometric API 从 BiometricPrompt 取代 FingerprintManager 开始,官方就在推一个"统一入口"的概念。但真到了要上线指纹支付、应用 2026-06-03 Android 4
Kotlin 的 Duration API,替代手写毫秒计算 Kotlin 的 Duration API,替代手写毫秒计算 Kotlin 的 Duration API,替代手写毫秒计算 一个让我放弃 `System.currentTimeMillis()` 的线上故障 去年维护一个音视频通话 SDK 时,我踩过一个很蠢的坑。代码里要判断用户是否超过 30 秒没 2026-06-02 Android 3
Compose 动画的 animate*AsState 底层怎么实现的 Compose 动画的 animate*AsState 底层怎么实现的 Compose 动画的 animate*AsState 底层怎么实现的 Jetpack Compose 1.0 正式版发布到现在已经三年多了,animate*AsState 这套 API 几乎成了每个 Compose 开发者最先 2026-06-01 Android 2