android应用之测试利器--StrictMode(未完成,待续)

StrictMode --严格模式

主要作用是检测android性能,查看UI线程的操作,是否存在读写数据,数据库操作,联网操作等,如果有,则会控制返回警告log,或者直接停止运行游戏来处理。

 

一般用于性能需求高的应用或者作者要求高的应用研发阶段,当发布版本的时候一般都取消此操作。

 

【用法如下】

在android应用activity的onCreate中添加固定接口即可。(官方提供使用方法如下)

 

 * public voidonCreate() {

 *     if (DEVELOPER_MODE) {

 *         StrictMode.setThreadPolicy(new {@linkThreadPolicy.Builder StrictMode.ThreadPolicy.Builder}()

 *                 .detectDiskReads()

 *                 .detectDiskWrites()

 *                 .detectNetwork()   // or .detectAll() for all detectableproblems

 *                 .penaltyLog()

 *                 .build());

 *         StrictMode.setVmPolicy(new {@linkVmPolicy.Builder StrictMode.VmPolicy.Builder}()

 *                 .detectLeakedSqlLiteObjects()

 *                 .detectLeakedClosableObjects()

 *                 .penaltyLog() //错误的警告打印

 *                 .penaltyDeath() //直接杀掉应用

 *                 .build());

 *     }

 *     super.onCreate();

 * }


 

知道用法,我们查询下源码,到底做了什么。

1.首先看下StrictMode.setThreadPolicy,StrictMode.setVmPolicy

 

 

2.了解状态是什么如何获取到这些状态

 

//读:

public Builder detectDiskReads() {

               return enable(DETECT_DISK_READ);

 }

 

//写:

 public BuilderdetectDiskWrites() {

               return enable(DETECT_DISK_WRITE);

}

//联网:

public Builder detectNetwork() {

               return enable(DETECT_NETWORK);

 }

 

//操作数据库:

 public BuilderdetectLeakedSqlLiteObjects() {

               return enable(DETECT_VM_CURSOR_LEAKS);

}



还有耗时操作等,此处不一一赘述.常量意义:

 

    public staticfinal int DETECT_DISK_WRITE = 0x01;  //for ThreadPolicy


    public staticfinal int DETECT_DISK_READ = 0x02;  //for ThreadPolicy


    public staticfinal int DETECT_NETWORK = 0x04;  // forThreadPolicy
 

 

从上面代码发现都所把自己以常量参数传递给enable函数处理,该函数做了什么呢,我们一起在分析下

 

private Builder enable(int bit) {

          mMask |=bit;

          returnthis;

}



原来所通过二进制算法获取到一个状态的标示

全局搜索,发现包括penaltyLog ,penaltyDeath在内都是通过enable(),来实现标示状态的

 

3.build()函数做了什么呢


你可能感兴趣的:(android应用之测试利器--StrictMode(未完成,待续))