(4.6.13)StrictMode严苛模式协助程序开发查错

来源:互联网 发布:做谱子的软件 编辑:程序博客网 时间:2024/05/18 01:51
1.StrictMode
StrictMode 是android API 9 引入的一个类, 能够帮助开发者 发现代码中的一些问题。它可以设置一些策略,当程序违反这些策略的时候,它会提示开发者。

主要有两大类策略,一个是线程方面的策略,一个是VM方面的策略。
线程策略方面,它能够发现UI线程读写DISK,UI线程访问网络,自己写的速度慢的代码
VM策略方面,它能够发现 Activity内存泄露, SQL 对象内存泄露, 资源未释放,能够限定某个类的最大对象数
当程序违反这些策略的时候,它会通过一定方式通知开发者,如log等。
具体代码如下。

[java] view plaincopy
  1. public static void enableStrictMode() {
  2. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
  3. StrictMode.ThreadPolicy.Builder threadPolicyBuilder = //线程策略
  4. new StrictMode.ThreadPolicy.Builder()
  5. .detectAll() //发现所有策略的违反行为
  6. .penaltyLog(); //发现违反策略,打印log。还有其他的方式,参考API
  7. StrictMode.VmPolicy.Builder vmPolicyBuilder = //VM策略
  8. new StrictMode.VmPolicy.Builder()
  9. .detectAll()
  10. .penaltyLog();
  11. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  12. threadPolicyBuilder.penaltyFlashScreen(); //发现违反策略的行为,是屏幕闪烁
  13. vmPolicyBuilder
  14. .setClassInstanceLimit(MyClass.class1); //这里限制 MyClass 的实例最多只有一个,否则违反策略。
  15. }
  16. StrictMode.setThreadPolicy(threadPolicyBuilder.build());
  17. StrictMode.setVmPolicy(vmPolicyBuilder.build());
  18. }
  19. }
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static void enableStrictMode() {  
  2.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {  
  3.             StrictMode.ThreadPolicy.Builder threadPolicyBuilder = //线程策略  
  4.                     new StrictMode.ThreadPolicy.Builder()  
  5.                             .detectAll()   //发现所有策略的违反行为  
  6.                             .penaltyLog(); //发现违反策略,打印log。还有其他的方式,参考API  
  7.             StrictMode.VmPolicy.Builder vmPolicyBuilder =   //VM策略  
  8.                     new StrictMode.VmPolicy.Builder()  
  9.                             .detectAll()  
  10.                             .penaltyLog();  
  11.   
  12.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  
  13.                 threadPolicyBuilder.penaltyFlashScreen(); //发现违反策略的行为,是屏幕闪烁  
  14.                 vmPolicyBuilder  
  15.                         .setClassInstanceLimit(MyClass.class1); //这里限制 MyClass 的实例最多只有一个,否则违反策略。  
  16.             }  
  17.             StrictMode.setThreadPolicy(threadPolicyBuilder.build());    
  18.             StrictMode.setVmPolicy(vmPolicyBuilder.build());  
  19.         }  
  20. }  
可以把它放到Application . onCreate() 里,这样,程序打开的时候,它就起作用了。
一定不要在release版中使用它,很耗性能的。
[java] view plaincopy
  1. if(debug){
  2. <pre class="java" name="code"><span style="white-space: pre;"> </span>enableStrictMode() ;</pre>}
  3. <pre></pre>
  4. <br>
  5. <br>
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. if(debug){  
  2. <div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/lize1988/article/details/11143807#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/lize1988/article/details/11143807#">copy</a><a target=_blank class="PrintSource" title="print" href="http://blog.csdn.net/lize1988/article/details/11143807#">print</a><a target=_blank class="About" title="?" href="http://blog.csdn.net/lize1988/article/details/11143807#">?</a></div></div><ol class="dp-j"><li class="alt"><span style=<span class="string">"white-space: pre;"</span>>    </span>enableStrictMode() ;  </li></ol></div> enableStrictMode() ;}  
  3. <pre>  



2,内存分析,检查内存泄露

1,hprof , 它能够将某一时刻的heap保存下来,以视图的方式来查看heap中的对象数目,对象占用空间,从根到对象的引用链。它还能将多个时刻 heap快照进行对比。
http://www.cnblogs.com/wisekingokok/archive/2011/11/30/2245790.html

2,trace allocation , 它能够跟踪内存分配情况,将导致内存分配的堆栈信息展示出来。

http://blog.csdn.net/harry_helei/article/details/6665219
0
0 0
原创粉丝点击