ANDROID StrictMode 使用
ANR窗口产生的原因是多种多样的。程序的主线程因为IO读写或网络阻塞而导致被阻塞了,外部存储设备被独占了或系统负荷(load)过高(即不是自己编写的程序的问题,可能是系统或者其他第三方程序导致的问题),都有可能导致ANR窗口的出现。
从Android 2.3开始提供了一个新的类StrictMode,可以帮助开发者改进他们的Android应用,StrictMode可以用于捕捉发生在应用程序主线程 中耗时的磁盘、网络访问或函数调用,可以帮助开发者使其改进程序,使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,
避免主线程被阻塞,导致ANR窗口的发生。
下面简要说明下Android 2.3新特性StrictMode限制模式的工作方式,见下面的代码:
01
|
public void onCreate() {
|
02
|
if (DEVELOPER_MODE) {
|
03
|
StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder()
|
04
|
.detectDiskReads()
|
05
|
.detectDiskWrites()
|
06
|
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
|
07
|
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
|
08
|
.build());
|
09
|
StrictMode.setVmPolicy( new StrictMode.VmPolicy.Builder()
|
10
|
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
|
11
|
.penaltyLog() //打印logcat
|
12
|
.penaltyDeath()
|
13
|
.build());
|
14
|
}
|
15
|
super .onCreate();
|
16
|
}
|
上述代码可以在Application的OnCreate中添加,这样就能在程序启动的最初一刻进行监控了。
输出log如下:
01
|
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 )
|
03
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java: 228 )
|
04
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at java.io.FileOutputStream.<init>(FileOutputStream.java: 94 )
|
05
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at java.io.FileOutputStream.<init>(FileOutputStream.java: 66 )
|
06
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at java.io.FileWriter.<init>(FileWriter.java: 42 )
|
07
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at org.zelos.asm.main.writeFile(main.java: 30 )
|
08
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at org.zelos.asm.main.onCreate(main.java: 19 )
|
09
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047 )
|
10
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1611 )
|
11
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 1663 )
|
12
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.access$ 1500 (ActivityThread.java: 117 )
|
13
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 931 )
|
14
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.os.Handler.dispatchMessage(Handler.java: 99 )
|
15
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.os.Looper.loop(Looper.java: 123 )
|
16
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.main(ActivityThread.java: 3683 )
|
17
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at java.lang.reflect.Method.invokeNative(Native Method)
|
18
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at java.lang.reflect.Method.invoke(Method.java: 507 )
|
19
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 839 )
|
20
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 597 )
|
21
|
02 - 27 10 : 03 : 56.122 : DEBUG/StrictMode( 16210 ): at dalvik.system.NativeStart.main(Native Method)
|
22
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): StrictMode policy violation; ~duration= 619 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy= 23 violation= 1
|
23
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java: 732 )
|
24
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java: 230 )
|
25
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at java.io.FileOutputStream.<init>(FileOutputStream.java: 94 )
|
26
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at java.io.FileOutputStream.<init>(FileOutputStream.java: 66 )
|
27
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at java.io.FileWriter.<init>(FileWriter.java: 42 )
|
28
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at org.zelos.asm.main.writeFile(main.java: 30 )
|
29
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at org.zelos.asm.main.onCreate(main.java: 19 )
|
30
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047 )
|
31
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1611 )
|
32
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 1663 )
|
33
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.access$ 1500 (ActivityThread.java: 117 )
|
34
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 931 )
|
35
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.os.Handler.dispatchMessage(Handler.java: 99 )
|
36
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.os.Looper.loop(Looper.java: 123 )
|
37
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at android.app.ActivityThread.main(ActivityThread.java: 3683 )
|
38
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at java.lang.reflect.Method.invokeNative(Native Method)
|
39
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at java.lang.reflect.Method.invoke(Method.java: 507 )
|
40
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 839 )
|
41
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 597 )
|
42
|
02 - 27 10 : 03 : 56.162 : DEBUG/StrictMode( 16210 ): at dalvik.system.NativeStart.main(Native Method)
|
ANDROID StrictMode 使用相关推荐
- android strictmode有什么作用,Android StrictMode运行流程(推荐)
什么是 StrictMode(严苛模式) strictmode是android在 API9后引入的检测影响app运行流畅性的一种机制,例如我们都知道的主线程中不允许有网络操作这条规则就是严苛模式规则的 ...
- android strictmode有什么作用,Android 性能优化 之 StrictMode
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? StrictMode概述 StrictMode 是用来检测程序中违例情况的开发者工具.使用StrictMode,系统检测 ...
- android strictmode有什么作用,Android严苛模式StrictMode使用详解
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...
- strictmode android,Android StrictMode使用
StrictMode是Android提供的一个开发工具,用于检测一些异常的操作,以便开发者进行修复.StrictMode可以监控以下问题, 不应该在应用主线程中完成的工作,包括磁盘读写.网络访问等. ...
- Android StrictMode
研究glide源码时发现了下面一段代码 @Overridepublic synchronized Thread newThread(@NonNull Runnable runnable) {final ...
- android strictmode有什么作用,Android StrictMode policy
问题 Running into some ANR issues with an android application so I implemented the StrictMode policies ...
- android strictmode有什么作用,Android StrictMode介绍
今天在阅读Wordpress for android 的源代码的时候看到这个. 之前项目中未曾用过,google了一下发现很有用.写篇blog记录下./** * enables "stric ...
- android 设置folder类型,正确配置你的 Android 项目
简评:优秀的 Android 项目从配置开始.: ) 作者在这里介绍了一个 Android 项目应该有的配置,文中讲到的内容大家都可以运用在自己的 Android 模板项目中. gitignore 当 ...
- MI8 build.prop 优化整理,代码,安卓9
修改文件有风险 操作不当会变砖,无法开机 操作不当会变砖,无法开机 操作不当会变砖,无法开机 首先你必要有ROOT R.E.管理器打开文件夹 /system/ 复制 build.prop 文件到 储存 ...
最新文章
- 尚硅谷学Javaweb,关于正则表达式笔记
- linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
- 代码审查工具StyleCop
- configure: error: Neither flex nor lex was found.
- mess系统可以读取opc服务器,C3. Messages
- php读取excel存入mysql数据库_PHP将Excel内容导入mysql数据库
- 初学者一些常用的SQL语句(一)
- 【渝粤教育】国家开放大学2018年秋季 2080T现代教育思想 参考试题
- android计步器报告书,Android精准计步器开发-Dylan计歩
- 【随笔篇】2019全国大学生电子设计竞赛回望与总结
- 人这一辈子,渡你的只有两个人
- GATK教程 / 体细胞短变异检测 (SNV+InDel)流程概览
- Android进程保活、拉活方案
- pwm调速流程图小车_51单片机智能小车《pwm调速按键控制小车动作》
- Js中身份证验证及社会统一信用代码验证
- Lingo练习 选拔问题
- ORB-SLAM2-学习笔记
- 【问题记录】usage: nn_train.py [-h] -d DATASET -m MODEL -l LABEL_BIN -p PLOT nn_train.py: error: the follo
- H3 BPM公文管理解决方案
- java计算利息_java银行计算利息
热门文章
- 10005---海量数据排序总结
- 【Torch】Dataloader torch.utils.data.DataLoader全面详实概念理解
- 【小技巧】IDEA更换个性自定义背景
- 31岁才转行程序员,现在34了,我来说说我的经历和一些感受吧...
- linux 进程 内存 耗光,Linux内存耗尽原因分析
- 科大奥瑞物理实验——光纤传感器实验
- WINDOWS 2003设置攻略
- mysql根据分隔符将一行数据拆分成多行数据
- jQuery获取或设置元素的属性值prop/attr
- Python 数据采集-爬取学校官网新闻标题与链接(基础)