android 2.3 StrictMode 使用

ANR窗口产生的原因是多种多样的。程序的主线程因为IO读写或网络阻塞而导致被阻塞了,外部存储设备被独占了或系统负荷(load)过高(即不是自己编写的程序的问题,可能是系统或者其他第三方程序导致的问题),都有可能导致ANR窗口的出现。

从Android 2.3开始提供了一个新的类StrictMode,可以帮助开发者改进他们的Android应用,StrictMode可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者使其改进程序,使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞,导致ANR窗口的发生。

下面简要说明下Android 2.3新特性StrictMode限制模式的工作方式,见下面的代码:

publicvoid onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()
.build());
}
super.onCreate();
}

上述代码可以在Application的OnCreate中添加,这样就能在程序启动的最初一刻进行监控了。

输出log如下:

02-27 10:03:56.122: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=696 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:745)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:228)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at java.io.FileWriter.<init>(FileWriter.java:42)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at org.zelos.asm.main.writeFile(main.java:30)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at org.zelos.asm.main.onCreate(main.java:19)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.os.Looper.loop(Looper.java:123)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at java.lang.reflect.Method.invokeNative(Native Method)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at java.lang.reflect.Method.invoke(Method.java:507)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-27 10:03:56.122: DEBUG/StrictMode(16210): at dalvik.system.NativeStart.main(Native Method)
02-27 10:03:56.162: DEBUG/StrictMode(16210): StrictMode policy violation; ~duration=619 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=23 violation=1
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:230)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at java.io.FileWriter.<init>(FileWriter.java:42)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at org.zelos.asm.main.writeFile(main.java:30)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at org.zelos.asm.main.onCreate(main.java:19)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.os.Looper.loop(Looper.java:123)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at java.lang.reflect.Method.invokeNative(Native Method)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at java.lang.reflect.Method.invoke(Method.java:507)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-27 10:03:56.162: DEBUG/StrictMode(16210): at dalvik.system.NativeStart.main(Native Method)

posted on 2011-02-27 18:32 secularbird 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/zelos/archive/2011/02/27/1966403.html

android 2.3 StrictMode 使用相关推荐

  1. android strictmode有什么作用,Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  2. Android严苛模式StrictMode使用与取消

    StrictMode最常用来捕捉应用程序的主线程,报告与线程及虚拟机相关的策略违例.一旦检测到策略违例(policy violation),开发者将获得输出警告:包含了一个栈trace显示你的应用在何 ...

  3. Android开发之StrictMode

    StrictMode简介 Android开发者官网对StrictMode的介绍 StrictMode类是Android 2.3(API 9)引入的一个工具类 用来帮助开发者发现代码中一些不规范的问题, ...

  4. strictmode android,Android中的StrictMode

    StrictMode.ThreadPolicy public static final class StrictMode.ThreadPolicy extends Object java.lang.O ...

  5. strictmode android,(十三)Android 性能优化 StrictMode

    小酌鸡汤 富贵必从勤苦得,男儿须读五车书. StrictMode能检测什么呢? StrictMode主要检测两大问题:线程策略(TreadPolicy)和VM策略(VmPolicy). StrictM ...

  6. Android中的StrictMode简介

    .build()); 当然,以上代码只应在未发布上线的测试版本的应用中运行以方便监视相关的运行情况,当在生产版本上时不应该启用strictmode.因此,最佳的代码实践应该为如下的样子: public ...

  7. android 严苛模式,Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  8. [转]Android最佳实践之:StrictMode介绍

    [IT168技术]最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode).这个类可以用来帮助开发者改进他们编写 ...

  9. ANDROID StrictMode 使用

    ANR窗口产生的原因是多种多样的.程序的主线程因为IO读写或网络阻塞而导致被阻塞了,外部存储设备被独占了或系统负荷(load)过高(即不是自己编写的程序的问题,可能是系统或者其他第三方程序导致的问题) ...

最新文章

  1. python操作excel之 模块 xlrd (详解)
  2. 关于URL指向的icon的存储问题
  3. apipost提示error:invalid protocol的解决方案
  4. mysql 连接qt5.2_Qt5.2 连接MySQL数据库
  5. 文本不换行,显示省略号
  6. PKU 3273  PKU 3258  pku 1905 PKU 3122 二分运用题目
  7. 《APUE》读书笔记—第四章文件和目录
  8. Win10下配置IIS并调试ASP程序
  9. 最优化方法——梯度下降法、牛顿法、LM算法
  10. ROS下usb_cam的安装
  11. Ds918 ds3615 ds3617区别_苹果678有什么区别
  12. 区块链数字货币应用场景不同决定了价值空间
  13. thumbnails 变黑_解决java压缩图片透明背景变黑色的问题
  14. github invalid authentication data can't create token:scopes - [repo,gist] - note Intellif Plugin_1
  15. c++ 汉语转换成拼音
  16. 风起看云涌,叶落品人生 - Google 搜索
  17. java设计模式——装饰模式
  18. 更高更快更强!“游戏引擎”发展漫谈
  19. Shell脚本之函数
  20. 中国科学院计算机所张浩,专家人才库数据----中国科学院计算技术研究所

热门文章

  1. filebeat7.7.0相关详细配置预览- processors - add_host_metadata
  2. 关于Raphael开发过程中的一些总结
  3. Ansible-大总结(六)
  4. android自定义View之margin和padding的处理
  5. vue+cordova 实现第三方登录( QQ 微信 微博)之微信登录
  6. RNN中BPTT的推导和可能的问题
  7. 【云栖大会】云栖大会盛大召开 已成全球一流科技盛会
  8. python爬虫--爬取9某1看剧网电视剧
  9. 调查问卷生成json字符串
  10. Allergo导出Gerber文件