Android StrictMode简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 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操作必须在主线程中进行。

猜你喜欢

转载自blog.csdn.net/johnWcheung/article/details/81672916