版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/johnWcheung/article/details/81672916
Android严苛模式StrictMode可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。
严苛模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。
ThreadPolicy线程策略检测
- 自定义的耗时调用:
detectCustomSlowCalls()
- 磁盘读取操作:
detectDiskReads()
- 磁盘写入操作:
detectDiskWrites()
- 网络操作:
detectNetwork()
VmPolicy虚拟机策略检测
- Activity泄露:
detectActivityLeaks()
- 未关闭的Closable对象泄露:
detectLeakedClosableObjects()
- 泄露的Sqlite对象:
detectLeakedSqlLiteObjects()
- 检测实例数量:
setClassInstanceLimit()
具体用法
- 默认的规则测试
//Application.onCreate()
publicvoid onCreate() {
if(DEVELOPER_MODE) {
StrictMode.enableDefaults();
}
super.onCreate();
}
- 自己定义测试的策略
public void onCreate() {
if (DEV_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectCustomSlowCalls() //API等级11,使用StrictMode.noteSlowCode
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyDialog() //弹出违规提示对话框
.penaltyLog() //在Logcat 中打印违规异常信息
.penaltyFlashScreen() //API等级11
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects() //API等级11
.penaltyLog()
.penaltyDeath()
.build());
}
super.onCreate();
}
注意事项
- 只在开发阶段启用StrictMode,发布应用或者release版本一定要禁用它。
- 严格模式无法监控JNI中的磁盘IO和网络请求。
- 应用中并非需要解决全部的违例情况,比如有些IO操作必须在主线程中进行。