MAT 工具分析堆转储,定位内存泄漏 MAT 工具分析堆转储,定位内存泄漏 「MAT 工具分析堆转储,定位内存泄漏」 Android 应用的内存泄漏问题,说大不大,说小不小。说它不大,是因为很多应用在用户手上运行三五分钟就被杀掉了,泄漏那点内存根本来不及累积成灾难。说它不小,是因为一旦泄漏发生在常驻组件——比如 Service、单例、或 2026-06-25 tool 0
NDK 开发的 CMake 配置模板分享 NDK 开发的 CMake 配置模板分享 NDK 开发的 CMake 配置模板分享 一个被 CMake 3.10 坑过的开场 去年维护一个老项目时,我把 build.gradle 里的 externalNativeBuild.cmake.version 从 "3.10.2" 顺手改成了 "3.22. 2026-06-25 tool 0
CopyOnWriteArrayList 的读写分离,更新开销有多大 CopyOnWriteArrayList 的读写分离,更新开销有多大 「CopyOnWriteArrayList 的读写分离,更新开销有多大」 去年排查一个线上 OOM 问题时,堆栈里反复出现 java.util.concurrent.CopyOnWriteArrayList 的 add 方法,这让 2026-06-25 Android 0
ProfileInstaller 的 Baseline Profile 分发,Play Store 之外怎么发 ProfileInstaller 的 Baseline Profile 分发,Play Store 之外怎么发 「ProfileInstaller 的 Baseline Profile 分发,Play Store 之外怎么发」 Baseline Profile 这玩意儿,Google 推了有几年了。 2026-06-24 Android 3
RenderThread 的异步渲染,UI 线程真的减负了吗 RenderThread 的异步渲染,UI 线程真的减负了吗 RenderThread 的异步渲染,UI 线程真的减负了吗 从一次掉帧排查说起 去年在优化一个信息流页面的时候,我遇到了一个挺反直觉的现象。列表滑动时 Systrace 显示 UI 线程的 doFrame 耗时只有 6-7ms,远低于 2026-06-23 Android 5
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 5
Firebase 免费额度够用吗,超出后多少钱 Firebase 免费额度够用吗,超出后多少钱 「Firebase 免费额度够用吗,超出后多少钱」 Firebase 的 Spark 计划(免费档)在 Google 产品里算是个异类。它不像 GCP 那样新用户送 300 美元试用金、到期就停,而是真正意义上的"永久免费"——只要你不触发某些隐藏开关 2026-06-22 tool 5
Android 16 的早期爆料,预测功能列表 Android 16 的早期爆料,预测功能列表 Android 16 的早期爆料:Google 真的在听开发者说话吗? 从 Android 15 的"稳定版"闹剧说起 Android 15 的稳定版推送节奏,大概是近几年最让人哭笑不得的一次。Pixel 设备在九月底收到 OTA,结果不到两周,Goo 2026-06-22 随笔 4
WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 WebSettings 的缓存模式,H5 混合应用的加载策略 去年维护一个存量混合应用时,遇到一个让我困惑了很久的问题:同样的 H5 页面,在 iOS 上二次打开几乎是瞬时的,Android 上却总是要从头加载。排查了一圈 CDN、HTT 2026-06-21 Android 7