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秒的运算后弹出
分享到:
相关推荐
当出现提示说: Call requires API level 9 (current min is 8): android.os.StrictMode#setThrea 也就是说版本低
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,...
StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。最常用的场景就是检测主线程中本地磁盘和网络读写等耗时的...这篇文章给大家介绍Android性能调优利器StrictMode应用分析,感兴趣的朋友一起看看吧
很全的,不错的strictMode 的简介
Android 2.3提供一个称为严苛模式StrictMode的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。那它都做什么呢?它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例policy violation,...
介绍android 上运行时调试工具,strictmode,dropbox和tombstone
Android通过webservice连接SqlServer实例(Android4.0可运行)从原博http://blog.csdn.net/zhyl8157121/article/details/8169172下载下来的demo,看了评论和其它文章后修改,解决了Android2.3以上StrictMode模式下不...
StrictMode在Android 2.3(API 9)的时候就已经引入了,虽然到当前这个工具年代比较久远 了,但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络...
Android 7.0行为变更 ...对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriE
Android在使用HttpURLConnection时常常遇到无法同时支持3.0和2.X版本的问题,本源码演示了如何用同一个包支持两个版本的问题。
strictmode是android在 API9后引入的检测影响app运行流畅性的一种机制。这篇文章给大家介绍了android strictmode运行流程,需要的朋友参考下吧
Caused by: android.os.FileUriExposedException; t android.os.StrictMode.onFileUriExposed
1.1 Android如何执行代码 1.2 优化斐波纳契数列 1.2.1 从递归到迭代 1.2.2 BigInteger 1.3 缓存结果 1.4 API等级 1.5 数据结构 1.6 响应能力 1.6.1 推迟初始化 ...
1.4.4 用DDMS截屏 1.4.5其他工具 1.5 结束语 第2章 创建第一个应用 2.1 创建一个应用 2.2 开始使用Android视图 2.3 排布视图2.3.1 FrameLayout 2.3.2 TableLayout 2.3.3 LinearLayout 2.3.4RelativeLayout 2.3.5 ...
2.3 Hello World! 2.4 AVD 2.5 剖析Android应用程序的结构 2.6 分析Notepad应用程序 2.6.1 加载和运行Notepad应用程序 2.6.2 分解应用程序 2.7 了解应用程序生命周期 2.8 调试应用程序 ...
xml java系统源码 ChoseHead 调用系统相机、相册、剪裁图片并上传(常用于上传头像,兼容Android7.0) 由于在Android 7.0 采用了StrictMode API政策禁,其中有一条限制就是对目录...android:name="android.support.v4.