android使用StrictMode进行应用优化
2015-03-08 17:03
381 查看
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秒的运算后弹出
启用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秒的运算后弹出
相关文章推荐
- 使用Junit对Android应用进行单元测试
- 使用Eclispe进行Android系统应用的开发和调试 推荐
- 对android应用进行单元测试使用单元测试框架
- Android应用性能优化之使用SparseArray替代HashMap
- Android应用性能优化之使用SparseArray替代HashMap
- 使用Junit对Android应用进行单元测试
- Android应用性能优化之使用SparseArray替代HashMap
- 使用virtualbox安装android 4.0 (ICS)虚拟机,并使用adb连接虚拟机进行应用开发的方法
- Android应用性能优化之使用SparseArray替代HashMap
- 在Windows系统中使用C++进行Android应用开发的环境搭建
- phonegap 开发入门 PhoneGap官方网站上有详细的入门示例教程,这里,我针对使用PhoneGap进行Android移动应用的开发对其官网的Get Started进行一些介绍、补充。 Ste
- ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)第1/2页
- Android_使用ant对项目进行编译签名优化打包
- [转]针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
- Android使用ant对项目进行编译签名优化打包
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
- 使用Junit对Android应用进行android3.0单元测试
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
- Android应用开发之使用Socket进行大文件断点上传续传
- Android使用ant对项目进行编译签名优化打包