StrictMode 检测主线程 IO,生产环境敢开吗
StrictMode 检测主线程 IO,生产环境敢开吗
去年在做启动性能优化的时候,通过 Systrace 发现主线程在 Application.onCreate 里有一小段可疑阻塞。跟进去看,是一个第三方 SDK 在初始化时读了 assets 目录下的配置文件。虽然最后只花了 80ms,但在低端机上足够让启动掉帧。当时想,如果能在开发阶段就拦住这种主线程 IO,StrictMode 的 detectDiskReads 看起来是最直接的方案。但问题随之来了:StrictMode 的 ThreadPolicy 如果配了 penaltyDeath,线上敢开吗?
detectDiskReads 到底能抓住什么
StrictMode.ThreadPolicy 的 Builder 模式提供了一套非常直观的 API,detectDiskReads、detectDiskWrites、detectNetwork,这三项基本覆盖了主线程最常见的外设阻塞来源。底层实现上,Android 通过 libcore