android2.新的APIxa0StrictMode介绍

2023-05-22


在android中,google.StrictMode增加到3中 API设置了一个thread策略(ui进程或分流程),它主要测试了读写操作、访问网络、数据库读写等耗时操作,并将其直接打印为log或dialog。通过对这些日志的分析,可以尽早找出程序运行缓慢的原因,从而优化代码,防止ANR(Application Not Responding)窗子的出现。


使用StrictMode
建议使用StrictMode的方法是,在开发阶段,打开它,在发布应用之前关闭它。
例如:在你的应用中,onCreate():






代码Java




    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






      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秒的计算时间。


      本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

      免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com