0
点赞
收藏
分享

微信扫一扫

android2.3新增API StrictMode介绍

M4Y 2023-04-30 阅读 55


google在android2.3中新增了StrictMode API来设置对一个thread的策略(ui线程或者分线程),它主要检测了读写操作,访问网络,数据库读写等耗时的操作并将其以log或者dialog等形式打印出来。分析这些日志,我们可以尽快找出程序运行缓慢的原因进而优化代码,避免ANR(Application Not Responding)窗口的出现。

启用StrictMode
推荐的使用StrictMode的方式是,在开发阶段,打开它,在发布应用前,关闭它。
例如:在你的应用中,onCreate():



Java代码

android2.3新增API StrictMode介绍_android

 

android2.3新增API StrictMode介绍_访问网络_02

    1. public void onCreate() {   
    2.  
    3.   if (DEVELOPER_MODE) {    
    4.       StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() //构造StrictMode   
    5.  
    6.               .detectDiskReads() //当发生磁盘读操作时输出   
    7.  
    8.               .detectDiskWrites()//当发生磁盘写操作时输出   
    9.  
    10.               .detectNetwork()  //访问网络时输出,这里可以替换为detectAll() 就包括了磁盘读写和网络I/O   
    11.  
    12.               .penaltyLog()  //以日志的方式输出   
    13.  
    14.               .build());   
    15.  
    16.       StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()   
    17.  
    18.               .detectLeakedSqlLiteObjects() //探测SQLite数据库操作   
    19.  
    20.          .penaltyLog() //以日志的方式输出   
    21.  
    22.               .penaltyDeath()   
    23.  
    24.               .build());   
    25.  
    26.   }   
    27.  
    28.   super.onCreate();   
    29.  
    30.





    当触发策略中的操作时系统会打印出一条StrictMode日志,格式如下:



    Java代码

    android2.3新增API StrictMode介绍_android

     

    android2.3新增API StrictMode介绍_android_04

    android2.3新增API <wbr>StrictMode介绍



      1. 02-27 10:03:56.122: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=696 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2    
      2. 02 02-27 10:03:56.122: DEBUG/StrictMode(16210):     at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:745)




      另外说明两点:

      1.在android2.3版本直接在ui线程中访问网络会报错

      2.ANR窗口会在程序阻塞或者耗时超过5秒的运算后弹出 

      举报

      相关推荐

      0 条评论