StrictMode个人使用笔记(StrictMode是一个开发工具)

原创 2013年12月06日 12:59:08

StrictMode

      个人使用理解:可以监视项目当中书写代码的不规范和不好的代码,监视程序运行情况,如果出现严重的问题,会有相应的对话框提示,和对应的log,安卓在2.3API就加入了该API,官方定义:http://developer.android.com/reference/android/os/StrictMode.html,


        发现有这么好个开发工具为什么不用到自己的项目里面来了,举例,把该工具添加到自己的项目,以安防项目为例:添加步骤也很简单,官网说的:Example code to enable from early in your Application, Activity, or other application component's onCreate() method:也就是放到你程序最先初始化的onCreate() 方法里面,也就是我们自己的Application  里面初始化StrictMode ,如下代码:
 if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()   // or .detectAll() for all detectable problems
                 .penaltyLog()
                 .build());
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()
                 .detectLeakedClosableObjects()
                 .penaltyLog()
                 .penaltyDeath()
                 .build());
     }

官网解释如下:
public static void setThreadPolicy (StrictMode.ThreadPolicy policy)

Added in API level 9
Sets the policy for what actions on the current thread should be detected, as well as the penalty if such actions occur.

Internally this sets a thread-local variable which is propagated across cross-process IPC calls, meaning you can catch violations when a system service or another process accesses the disk or network on your behalf.

Parameters
policy the policy to put into place

个人理解:对API要求是在9以上也就是2.3以上,该策略就是对线程使用的一个检测,在内部,该设置是传播跨跨进程的IPC调用,这意味着你可以捕捉违规行为时,系统服务或其他进程访问代表您的磁盘或网络中的线程局部变量。


setVmPolicy:设置检测虚拟机,

一般就两大类:,一类是关于常用的监控方面的,另外一类是关于VM虚拟机等方面的策略,然后我运行程序,出现如下错误:


对应的LOG错误如下:
12-06 11:43:58.615: D/ImageLoader(16738): Initialize ImageLoader with configuration
12-06 11:43:58.615: D/StrictMode(16738): StrictMode policy violation; ~duration=23 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=63 violation=2
12-06 11:43:58.615: D/StrictMode(16738): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1123)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:203)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:223)
12-06 11:43:58.615: D/StrictMode(16738): at com.cleaderwin.anfang.app.AnFangApplication.initConfig(AnFangApplication.java:121)
12-06 11:43:58.615: D/StrictMode(16738): at com.cleaderwin.anfang.app.AnFangApplication.onCreate(AnFangApplication.java:67)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4444)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.ActivityThread.access$1300(ActivityThread.java:141)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
12-06 11:43:58.615: D/StrictMode(16738): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 11:43:58.615: D/StrictMode(16738): at android.os.Looper.loop(Looper.java:137)
12-06 11:43:58.615: D/StrictMode(16738): at android.app.ActivityThread.main(ActivityThread.java:5103)
12-06 11:43:58.615: D/StrictMode(16738): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 11:43:58.615: D/StrictMode(16738): at java.lang.reflect.Method.invoke(Method.java:525)
12-06 11:43:58.615: D/StrictMode(16738): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-06 11:43:58.615: D/StrictMode(16738): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)



所以我觉得这个开发工具,应用策略完全可以放到程序里面来,对程序五毒无害,还绿色开源,为何不用了?



相关文章推荐

StrictMode 详解

StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题。比如,如果你在UI线程中进行了网络或者磁盘操作,StrictMode就会...

SharedPreferences 详解

文章出处:http://blog.csdn.net/shift_wwx 请转载的朋友标明出处~~ 前言:之前 SharedPreference 实现不同进程间的数据共享  中谈了一下数据共享,最...

Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode

adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Content Provider(上) 。 abd –e shell -e是...

Android严苛模式StrictMode使用详解

Android严苛模式StrictMode使用详解

Strictmode的使用

转自:Strictmode的使用StrictMode通常用于抓取在应用程序的主线程中来操作磁盘或者网络访问的问题,比如界面操作和动画,在非UI线程中处理磁盘文件和网络 操作使得程序更快、响应更及时,在...

StrictMode的使用之消除卡顿

StrictMode的使用 StrictMode用来基于线程或VM设置一些策略, 一旦检测到策略违例, 控制台将输出一些警告,包含一个trace信息展示你的应用在何处出现问题. ...
  • yishifu
  • yishifu
  • 2016年11月17日 10:31
  • 152

StrictMode检查android开发违反策略的方法

最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了...

StrictMode的使用(转)

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

StrictMode使用

【IT168技术】最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写...
  • licx11
  • licx11
  • 2015年03月25日 10:38
  • 250

Android性能优化之StrictMode 的使用

Android 2.3 (API 9)引入的一个工具类StrictMode,可以用来帮助开发者发现代码中的一些不规范的问题。 提供了各种策略,比如监视网络访问 和 磁盘读写操作.当开发者违背了事...
  • wbwjx
  • wbwjx
  • 2015年12月29日 21:14
  • 628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StrictMode个人使用笔记(StrictMode是一个开发工具)
举报原因:
原因补充:

(最多只允许输入30个字)