从Android 2.3开始提供了一个新的类名为StrictMode可以帮助开发者改进你的Android应用,StrictMode可以捕捉到在UI主线程中的I/O操作或者网络操作, 给出这些操作的耗时供开发者参考, 开发者可以将一些耗时的操作移到worker thread中去做, 减少ANR发生的概率.
使用方式如下, 一般将这段代码放到activity的onCreate()函数中, 尽可能的提早执行这段代码已发现耗时的操作。
public void onCreate() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
super.onCreate();
}
之后查看log, 会有如下的输出:
通过这个调用栈可以清晰的看到操作的类型:writeToDisk(写操作), 以及调用的位置, 据此就可以对代码结构做出一定的调整,比如优化代码或者将耗时操作移到子线程中去做。