Android避免ANR之StrictMode

   从Android 2.3开始提供了一个新的类名为StrictMode可以帮助开发者改进你的Android应用,StrictMode可以捕捉到在UI主线程中的I/O操作或者网络操作, 给出这些操作的耗时供开发者参考, 开发者可以将一些耗时的操作移到worker thread中去做, 减少ANR发生的概率.

   使用方式如下, 一般将这段代码放到activityonCreate()函数中, 尽可能的提早执行这段代码已发现耗时的操作。

 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, 会有如下的输出:

Android避免ANR之StrictMode_第1张图片

通过这个调用栈可以清晰的看到操作的类型:writeToDisk(写操作), 以及调用的位置据此就可以对代码结构做出一定的调整,比如优化代码或者将耗时操作移到子线程中去做。

      

你可能感兴趣的:(Android避免ANR之StrictMode)