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之后,你会惊奇的发现,你可以在主线程做任何事,访问网络等,所以如果有特殊要求要在主线程做耗时操作,可以考虑这个方案。