详解Android StrictMode严格模式的使用方法

 更新时间:2018年01月10日 10:46:54   作者:苍痕  
这篇文章主要介绍了Android StrictMode严格模式的使用方法,需要的朋友可以参考下

Android 2.3提供一个称为严苛模式StrictMode的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。那它都做什么呢?它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。你可以强制用警告代替崩溃crash,也可以仅将警告计入日志让你的应用继续执行。StrictMode是一个十分有用的类,它可以很方便地应用于检查Android应用程序的性能和存在的问题。当开启这个模式后,开发者能很好地检查应用中存在的潜在问题。

StrictMode分为以下两种策略:

1. 线程监控策略

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
          .detectDiskReads() 
          .detectDiskWrites() 
          .detectNetwork() 
          .detectAll() 
          .penaltyLog() 
                    //penaltyDeath() 
          .build());  

(1)setThreadPolicy():将对当前线程应用该策略 

(2)detectDiskReads():监控磁盘读 

(3)detectDiskWrites():监控磁盘写 

(4)detectNetwork():监控网络访问 

(5)detectAll():检测当前线程所有函数 

(6)penaltyLog():表示将警告输出到LogCat,你也可以使用其他或增加新的惩罚(penalty)函数,例如使用penaltyDeath()的话,一旦StrictMode消息被写到LogCat后应用就会崩溃。 

你不需要频繁打开严苛模式,你可以在Activity的onCreate()函数中打开它,你也可以在Application派生类的OnCreate()函数中设置严苛模式。线程中运行的任何代码都可以设置严苛模式(StrictMode),但你的确只需要设置一次,一次就够了。

2.VM虚拟机监控策略

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
  .detectLeakedSqlLiteObjects() 
  .detectAll() 
  .penaltyLog() 
  //.penaltyDeath() 
  .build()); 

VM略重点关注如下几类:

(1)内存泄露的Activity对象

(2)内存泄露的SQLite对象

(3)内存泄露的其他任何类似可关闭对象

内存泄露的Activity对象和内存泄露的SQLite对象都比较好理解,而所谓“其他任何类似可关闭对象”的检查,主要是去监那些本该释放的对象,比如应该调用close()方法的对象。

3. 应该说大部分由StrictMode产生的规则警示都应去遵守,但有时也不是所有产生的信息都表明你的程序有错误。比如,在应用程序的主线程中去快速读写磁盘其实不会对应用的性能产生太大的影响,又或者你在调试程序阶段有一些调试的代码违反了设定的规则,这些都可以忽略掉这些规则。

忽略规则有两种方法,一种是单纯在代码中把Strictmode的代码注释掉,另外一种比较好的方法是,在需要忽略的时候和地方,增加相应的代码去让系统停止使用这些规则去检查,等开发者认为有必要检查时,再重新应用这些规则,比如:

StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy(); 
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old) 
  .permitDiskWrites() 
  .build());  
//TODO: do write something to disk 
StrictMode.setThreadPolicy(old); 

这里首先用old来保存了当前的策略规则,然后do write something to disk;这里执行了一些向磁盘快速读写的操作,最后又重新启用了这些规则。

总结

以上所述是小编给大家介绍的Android StrictMode严格模式的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android实现新浪微博一键分享的实例代码

    Android实现新浪微博一键分享的实例代码

    这篇文章主要介绍了Android实现新浪微博一键分享的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android studio实现加法软件

    Android studio实现加法软件

    这篇文章主要为大家详细介绍了Android studio实现加法软件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • android 网络请求库volley方法详解

    android 网络请求库volley方法详解

    这篇文章主要介绍了android 网络请求库volley方法详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • android查看网络图片的实现方法

    android查看网络图片的实现方法

    这篇文章主要为大家详细介绍了android查看网络图片的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Android控件Gallery3D效果实例代码

    Android控件Gallery3D效果实例代码

    GalleryFlow中主要做了对图片的旋转和缩放操作,根据图片的屏幕中的位置对其进行旋转缩放操作,具体实现如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • Android开发实现拨打电话与发送信息的方法分析

    Android开发实现拨打电话与发送信息的方法分析

    这篇文章主要介绍了Android开发实现拨打电话与发送信息的方法,结合实例形式分析了Android拨打电话及发送信息相关布局、功能实现及权限控制操作技巧,需要的朋友可以参考下
    2017-12-12
  • Android ListView实现简单列表功能

    Android ListView实现简单列表功能

    这篇文章主要为大家详细介绍了Android ListView实现简单列表功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android实现欢迎滑动页面

    Android实现欢迎滑动页面

    这篇文章主要为大家详细介绍了Android实现欢迎滑动页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android自定义实现转盘菜单

    Android自定义实现转盘菜单

    旋转菜单是一种占用空间较大,实用性稍弱的UI,本文主要为大家详细介绍了Android如何自定义实现转盘菜单,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2023-12-12
  • android studio 一直卡在Gradle:Build Running的几种解决办法

    android studio 一直卡在Gradle:Build Running的几种解决办法

    这篇文章主要介绍了android studio 一直卡在Gradle:Build Running的解决办法,非常具有实用价值,需要的朋友可以参考下
    2017-10-10

最新评论