StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。使用一般是场景是检测主线程中本地磁盘和网络读写等耗时的操作。注意这个StrictMode是在Anroid2.3以后引入的。严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。
线程策略(ThreadPolicy)检测的内容有:
- 1、自定义的耗时调用 使用detectCustomSlowCalls()开启
- 2、磁盘读取操作 使用detectDiskReads()开启
- 3、磁盘写入操作 使用detectDiskWrites()开启
- 4、网络操作 使用detectNetwork()开启
虚拟机策略(VmPolicy)检测的内容有:
- 1、Activity泄露 使用detectActivityLeaks()开启
- 2、未关闭的Closable对象泄露 使用detectLeakedClosableObjects()开启
- 3、泄露的Sqlite对象 使用detectLeakedSqlLiteObjects()开启
- 4、检测实例数量 使用setClassInstanceLimit()开启
可以看到线程策略主要与异步处理相关,虚拟机策略主要与内存管理相关。setThreadPolicy()将对当前线程应用该策略。如果不指定检测函数,也可以用detectAll()来替代。penaltyLog()表示将警告输出到LogCat,你也可以使用其他或增加新的惩罚(penalty)函数,例如使用penaltyDeath()的话,一旦StrictMode消息被写到LogCat后应用就会崩溃。另外虚拟机策略(VmPolicy)不能通过一个对话框提供警告。
在线程策略(ThreadPolicy)检测的时候,有几个penalty系列方法:
- 1、penaltyDeath(),当触发违规条件时,直接Crash掉当前应用程序。
- 2、penaltyDeathOnNetwork(),当触发网络违规时,Crash掉当前应用程序。
- 3、penaltyDialog(),触发违规时,显示对违规信息对话框。
- 4、penaltyFlashScreen(),会造成屏幕闪烁,不过一般的设备可能没有这个功能。