android2.3新增API StrictMode介绍

本文介绍Android2.3中新增的StrictMode API,该API可在开发阶段帮助开发者检测应用中的潜在问题,如UI线程中的网络访问、磁盘读写等耗时操作,并通过日志或对话框的形式展示,有助于提升应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

Java代码 复制代码  收藏代码android2.3新增API <wbr>StrictMode介绍
  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.    
 public void onCreate() {

    if (DEVELOPER_MODE) { 
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() //构造StrictMode

                .detectDiskReads() //当发生磁盘读操作时输出

                .detectDiskWrites()//当发生磁盘写操作时输出

                .detectNetwork()  //访问网络时输出,这里可以替换为detectAll() 就包括了磁盘读写和网络I/O

                .penaltyLog()  //以日志的方式输出

                .build());

        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

                .detectLeakedSqlLiteObjects() //探测SQLite数据库操作

           .penaltyLog() //以日志的方式输出

                .penaltyDeath()

                .build());

    }

    super.onCreate();

} 

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

Java代码 复制代码  收藏代码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)    
02-27 10:03:56.122: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=696 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=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秒的运算后弹出 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值