严苛模式(StrictMode)

来源:互联网 发布:化工专业英语翻译软件 编辑:程序博客网 时间:2024/06/06 02:49

Android 2.3起,新增加了一个类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题。常用的监控方面的策略有如下这些:
  Disk Reads 磁盘读
  Disk Writes 磁盘写
  Network access 网络访问
  Custom Slow Code 自定义的运行速度慢的代码分析
目前主流的是针对主线程(或UI线程),将违规操作写入logcat。其做法是在Application的onCreat()中设置严苛模式(StrictMode):

  private void initStrictMode() {        if (BuildConfig.DEBUG) {            StrictMode.setThreadPolicy(                    new StrictMode.ThreadPolicy.Builder()//线程策略                            .detectAll()//                            .penaltyDialog() // 弹出违规提示对话框                            .penaltyLog() // 在logcat中打印违规异常信息                            .build());            StrictMode.setVmPolicy(                    new StrictMode.VmPolicy.Builder()//虚拟机策略                            .detectAll()                            .penaltyLog()                            .build());        }    }

如代码中的注释penaltyDialog()为弹出提示对话框,penaltyLog()为在logcat中打印出来,打印信息在debug级别,大众做法为设置一个debug变量,使其只有在debug时进行策略检查,发布时改变变量(此变量用处挺多的,相信每个项目都会有,比如log封装类,在开发阶段为了方便会记录很多log信息,而我则会闷头敲代码,到发布时不可能再去一个一个排查,所以有个Mylog.init(boolean)会方便很多,当然有人打个log测完就删除了)。
了解了StrictMode就会发现,当检测到违规操作时,如果是打印到logcat,那就意味着如果我不搭理这个信息,那我就可以做这些操作,比如说:大家都知道,Android是不允许在主线程做耗时操作的,但你加上StrictMode的ThreadPolicy之后,你会惊奇的发现,你可以在主线程做任何事,访问网络等,所以如果有特殊要求要在主线程做耗时操作,可以考虑这个方案。

0 0
原创粉丝点击