RenderThread 的异步渲染,UI 线程真的减负了吗 RenderThread 的异步渲染,UI 线程真的减负了吗 RenderThread 的异步渲染,UI 线程真的减负了吗 从一次掉帧排查说起 去年在优化一个信息流页面的时候,我遇到了一个挺反直觉的现象。列表滑动时 Systrace 显示 UI 线程的 doFrame 耗时只有 6-7ms,远低于 2026-06-23 Android 2
JUnit 5 在 Android 测试中的配置与使用 JUnit 5 在 Android 测试中的配置与使用 JUnit 5 在 Android 测试中的配置与使用 Android 测试长期被 JUnit 4 统治。从 2018 年 Google 在 AndroidX Test 库中引入 AndroidJUnitRunner 开始,这个基于 JUnit 2026-06-23 tool 0
Android 的缓存目录选择:cacheDir vs filesDir vs externalCacheDir Android 的缓存目录选择:cacheDir vs filesDir vs externalCacheDir Android 的缓存目录选择:cacheDir vs filesDir vs externalCacheDir 一个被系统清理搞崩的线上事故 去年维护的一个工具类 App 在 Andr 2026-06-22 Android 1
Firebase 免费额度够用吗,超出后多少钱 Firebase 免费额度够用吗,超出后多少钱 「Firebase 免费额度够用吗,超出后多少钱」 Firebase 的 Spark 计划(免费档)在 Google 产品里算是个异类。它不像 GCP 那样新用户送 300 美元试用金、到期就停,而是真正意义上的"永久免费"——只要你不触发某些隐藏开关 2026-06-22 tool 4
Android 16 的早期爆料,预测功能列表 Android 16 的早期爆料,预测功能列表 Android 16 的早期爆料:Google 真的在听开发者说话吗? 从 Android 15 的"稳定版"闹剧说起 Android 15 的稳定版推送节奏,大概是近几年最让人哭笑不得的一次。Pixel 设备在九月底收到 OTA,结果不到两周,Goo 2026-06-22 随笔 2
WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 去年维护一个存量混合应用时,遇到一个让我困惑了很久的问题:同样的 H5 页面,在 iOS 上二次打开几乎是瞬时的,Android 上却总是要从头加载。排查了一圈 CDN、HTT 2026-06-21 Android 7
SVG 转 Vector Drawable 的注意事项 SVG 转 Vector Drawable 的注意事项 SVG 转 Vector Drawable 的注意事项 Android 开发里用 Vector Drawable 替代多套 PNG 已经是老生常谈了,但真把设计师给的 SVG 往项目里一丢,编译报错、运行时崩溃、渲染错位的问题从来没少过。这篇文 2026-06-21 tool 3
开源项目被大厂收购后的结局,你的依赖库还在吗 开源项目被大厂收购后的结局,你的依赖库还在吗 开源项目被大厂收购后的结局,你的依赖库还在吗 从 Square 的 LeakCanary 说起 Square 这家公司对 Android 生态的贡献,老一点的开发者应该都有印象。Retrofit、OkHttp、Picasso、LeakCanary,几乎构 2026-06-21 随笔 1
Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 「Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑」 一个线上崩溃引出的问题 去年维护的一个项目,线上收到一条很奇怪的崩溃栈:Ille 2026-06-21 Android 2
Google 对侧载应用的扫描策略,APK 安装前检查 Google 对侧载应用的扫描策略,APK 安装前检查 Google 对侧载应用的扫描策略,APK 安装前检查 Play Protect 的"守门"逻辑变了 Android 15 开始,Google 把侧载应用的扫描时机往前挪了一大步。以前是你点了安装、APK 落盘之后,Play Protect 才 2026-06-21 随笔 2