StrictMode严格模式,主要用来检测程序中违例情况的开发者工具。
最常用的场景就是检测主线程中本地磁盘、网络读写等耗时的操作以及Activity泄露等,但该模式不建议在Release版本开启,此外该模式无法监控JNI中的磁盘IO和网络请求且其违例情况仅供参考,需结合实际开发需求予以解决。
StrictMode做什么用的?
1.线程使用策略:ThreadPolicy
自定义的耗时调用 使用 detectCustomSlowCalls) 开启
磁盘读取操作 使用 detectDiskReads) 开启
磁盘写入操作 使用 detectDiskWrites) 开启
网络操作 使用 detectNetwork) 开启
2.内存(vm 虚拟机)使用策略:VmPolicy
Activity泄露 使用 detectActivityLeaks) 开启
未关闭的Closable对象泄露 使用 detectLeakedClosableObjects) 开启
泄露的Sqlite对象 使用 detectLeakedSqlLiteObjects) 开启
检测实例数量 使用 setClassInstanceLimit) 开启
具休使用:
1 public class DebugUtil { 2 public static void startStrictModeVmPolicy){ 3 StrictMode.setVmPolicynew StrictMode.VmPolicy.Builder) 4 .detectActivityLeaks)/*检测Activity内存泄露*/ 5 .detectLeakedClosableObjects)/*检测未关闭的Closable对象*/ 6 .detectLeakedSqlLiteObjects) /*检测Sqlite对象是否关闭*/ 7 /*也可以采用detectAll)来检测所有想检测的东西*/ 8 .penaltyLog).build)); 9 } 10 public static void startStrictModeThreadPolicy){ 11 StrictMode.setThreadPolicynew StrictMode.ThreadPolicy.Builder) 12 .detectDiskReads)/*磁盘读取操作检测*/ 13 .detectDiskWrites)/*检测磁盘写入操作*/ 14 .detectNetwork) /*检测网络操作*/ 15 /*也可以采用detectAll)来检测所有想检测的东西*/ 16 .penaltyLog).build)); 17 }
如何使用
关于StrictMode如何使用,最重要的就是如何启用严格模式。
放在哪里
严格模式的开启可以放在Application或者Activity以及其他组件的onCreate方法。为了更好地分析应用中的问题,建议放在Application的onCreate方法中。
简单启用
直接在application oncreate 中调用开启
if isDebug) {
DebugUtil.startStrictModeThreadPolicy);
DebugUtil.startStrictModeVmPolicy);
}
严格模式需要在debug模式开启,不要在release版本中启用。