App Startup 库真的能优化启动吗,实测数据 App Startup 库真的能优化启动吗,实测数据 App Startup 库真的能优化启动吗,实测数据 去年把项目里的第三方 SDK 初始化逻辑从 Application.onCreate 迁移到 AndroidX Startup 之后,我盯着 Macrobenchmark 跑出来的结果看了很久 2026-09-11 Android 0
WindowInsets 的兼容处理,从 Edge-to-Edge 说起 WindowInsets 的兼容处理,从 Edge-to-Edge 说起 「WindowInsets 的兼容处理,从 Edge-to-Edge 说起」 把项目 targetSdk 从 34 切到 35 之后,首页的底部导航栏直接沉到了屏幕最底下,被手势提示条盖住了大半。CoordinatorLayo 2026-09-11 Android 17
MediaStore 的日期查询索引,为什么有时候会慢 MediaStore 的日期查询索引,为什么有时候会慢 MediaStore 的日期查询索引,为什么有时候会慢 一个线上卡顿 case 上个月排查了一个相册模块的冷启动卡顿问题。Systrace 抓下来,主线程在 ContentResolver.query 上硬耗了 1.8 秒,直接导致首页 Rec 2026-09-08 Android 0
StrictMode 检测主线程 IO,生产环境敢开吗 StrictMode 检测主线程 IO,生产环境敢开吗 StrictMode 检测主线程 IO,生产环境敢开吗 去年在做启动性能优化的时候,通过 Systrace 发现主线程在 Application.onCreate 里有一小段可疑阻塞。跟进去看,是一个第三方 SDK 在初始化时读了 assets 2026-09-08 Android 9
Android 的剪贴板读取限制,Android 13 后的变化 Android 的剪贴板读取限制,Android 13 后的变化 Android 的剪贴板读取限制,Android 13 后的变化 去年把 App 的 targetSdkVersion 升到 33 之后,线上开始零星出现用户反馈:复制了分享口令,打开 App 却怎么都触发不了自动跳转。我本地拿一台 2026-09-08 Android 15
CopyOnWriteArrayList 的读写分离,更新开销有多大 CopyOnWriteArrayList 的读写分离,更新开销有多大 「CopyOnWriteArrayList 的读写分离,更新开销有多大」 去年在优化一个即时通讯模块时,我遇到了一个典型的并发修改崩溃。后台线程通过 WebSocket 不断收到新消息,直接往一个 ArrayList 里 add, 2026-09-08 Android 2
Palette 取色库的旧代码,现在还值得留吗 Palette 取色库的旧代码,现在还值得留吗 「Palette 取色库的旧代码,现在还值得留吗」 上个月重构一个老项目时,我在 build.gradle 里看到一行 androidx.palette:palette:1.0.0。愣了一下才反应过来,这个库自 2018 年 AndroidX 迁移之后 2026-09-02 Android 12
Security 库的 EncryptedSharedPreferences,性能损耗有多少 Security 库的 EncryptedSharedPreferences,性能损耗有多少 Security 库的 EncryptedSharedPreferences,性能损耗有多少 ANR trace 里抓到一条主线程堆栈,卡在 SharedPreferences 上的时间超过 600 毫秒。 2026-09-02 Android 0
ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 ViewModel 的 SavedStateHandle,进程杀死后数据还在吗 最近在重构一个订单填写页时,我把页面里的表单状态全部迁进了 ViewModel 的 SavedStateHandle。本地开发时开着开发者选 2026-08-31 Android 4