当前位置: 首页 > news >正文

android 2.3 StrictMode 使用

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

相关文章:

  • 前端之本http协议
  • 浙江省委组织部长蔡奇做客腾讯:我是微博控
  • SEO优化方案及SEO流程表
  • SpriteKit 技巧之添加背景图片
  • 实验九 三层交换机配置路由DHCP中继(二)
  • ILMerge合并多个DLL
  • htmlunit爬取js异步加载后的页面
  • ruby gem 0.9.4的问题
  • Innodb与Myisam引擎的区别与应用场景
  • Linux中有两类函数库,分别是静态库和动态库
  • 记忆模糊的知识点5-22
  • 深入说明HDR技术
  • 免费产品体验码已发放完毕,实物礼品已备好?
  • wdcp服务器/虚拟主机管理系统1.1发布
  • VMware ESXi 和 VMware Server 有什么区别
  • 0基础学习移动端适配
  • canvas绘制圆角头像
  • css属性的继承、初识值、计算值、当前值、应用值
  • fetch 从初识到应用
  • Git 使用集
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux下的乱码问题
  • maya建模与骨骼动画快速实现人工鱼
  • MYSQL 的 IF 函数
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python利用正则抓取网页内容保存到本地
  • Web Storage相关
  • 初探 Vue 生命周期和钩子函数
  • 关于List、List?、ListObject的区别
  • 记一次和乔布斯合作最难忘的经历
  • 模型微调
  • 前端相关框架总和
  • 前端学习笔记之观察者模式
  • 全栈开发——Linux
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​ubuntu下安装kvm虚拟机
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (03)光刻——半导体电路的绘制
  • (145)光线追踪距离场柔和阴影
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (八)Flask之app.route装饰器函数的参数
  • (动态规划)5. 最长回文子串 java解决
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 调用php,php 调用.net com组件 --
  • .NET项目中存在多个web.config文件时的加载顺序