android使用StrictMode进行应用优化

来源:互联网 发布:mac重新启动后卡住了 编辑:程序博客网 时间:2024/06/10 01:01

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

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

 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日志,格式如下:

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秒的运算后弹出 


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两个睾丸都碎了怎么办 快递退回去了钱怎么办 想登录老公微信怎么办 养狗家里味道大怎么办 实在不想养狗了怎么办 培训完不想干了怎么办 干了几天想离职怎么办 药流开始流血了怎么办 药流期间同房了怎么办 想学韩语可是没基础怎么办 鞋子多买了一双怎么办 胳膊抻着了怎么办妙招 胳膊抻筋了 很疼怎么办 干活胳膊抻筋了怎么办 胳膊上的筋扭了怎么办 一岁宝宝脖子歪怎么办 3岁宝宝轻微斜颈怎么办 2岁宝宝轻微斜颈怎么办 肩膀劳损痛的厉害怎么办 颈后面有个囊肿怎么办 扭腰了怎么办有偏方吗 跑步机点加油了怎么办 高二了英语30分怎么办 苍蝇往人身上飞怎么办 25岁了写字好丑怎么办 我字写得超难看怎么办 高三体检有纹身怎么办 快高考了有纹身怎么办 艺考身上有纹身怎么办 初三考试考砸了怎么办 考差了我该怎么办 发票认购簿丢了怎么办 税率开错为17%了怎么办 增值税票开错了怎么办 发票名字写错了怎么办 红米2卡开机画面怎么办 三星s4字库坏了怎么办 百度云上传很慢怎么办 入户网线头断了怎么办 针织的衣服起球怎么办 网线被车挂断了怎么办