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 在Android 应用开发中的应用和一些问题。 什么是StrictMode StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。最常用的场景就是检测主线程中本地磁盘和网络读写等耗时的...
StrictMode是自Android 2.3(Gingerbread)版本起引入的一个功能,它作为开发者模式的一部分,为应用程序提供了一种检测和报告应用行为中潜在问题的机制。通过启用StrictMode,开发者可以监控并捕获应用在运行时可能...
当出现提示说: Call requires API level 9 (current min is 8): android.os.StrictMode#setThrea 也就是说版本低
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,...
然而,从Android 3.0 (API Level 11)开始,引入了`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)的时候就已经引入了,虽然到当前这个工具年代比较久远 了,但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络...
strictmode是android在 API9后引入的检测影响app运行流畅性的一种机制,例如我们都知道的主线程中不允许有网络操作这条规则就是严苛模式规则的一种. strictmode.java 这个类中设定了许多detect标志位例如 DETECT_...
从Android 2.3开始,StrictMode类提供了此功能。 5. **移除调试代码**:在发布应用前,确保调试和诊断日志被禁用或最小化,因为它们会消耗性能。 6. **简洁的布局设计**:创建简单、直观的布局可以提高加载速度。...
Android 7.0行为变更 ...对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriE
4. **启用StrictMode**:从Android 2.3开始,开发者可以使用StrictMode检测主线程中的性能问题,如磁盘读写和网络访问,从而优化应用,确保UI的流畅性。 5. **发布前禁用或减少调试**:在应用发布之前,应移除或...
1.1 Android如何执行代码 1.2 优化斐波纳契数列 1.2.1 从递归到迭代 1.2.2 BigInteger 1.3 缓存结果 1.4 API等级 1.5 数据结构 1.6 响应能力 1.6.1 推迟初始化 ...
它是自Android 2.3版本引入的,通过设置不同的策略,可以在开发过程中及时发现并修正错误。 #### 技巧5:清理调试和诊断代码 在发布前,彻底清理或最小化应用中的调试和诊断代码,避免不必要的资源消耗。这不仅能...
首先,Android 7.0引入了"StrictMode",这是一个针对开发者工具的API,它可以帮助开发者在应用运行时检测到潜在的问题,如主线程上的磁盘读写、网络访问、长时间运行的后台操作等。在严格模式下,这些问题会触发惩罚...