详解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-10-10
  • Android UI效果之绘图篇(四)

    Android UI效果之绘图篇(四)

    这篇文章主要介绍了Android UI效果之绘图篇,针对Android开发中的UI效果设计模块中Shader进行讲解,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Android实现京东秒杀界面

    Android实现京东秒杀界面

    这篇文章主要为大家详细介绍了Android实现京东秒杀界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 一篇文章就能了解Rxjava

    一篇文章就能了解Rxjava

    最近偶然接触到了rxjava。关于rxjava,褒贬不一,有人说好用,有人说难用,不过它到底是什么?它有什么用?接下来,本文通过部分代码及分析,向大家介绍rxjava及其相关内容。
    2017-10-10
  • 点击图标进入指定浏览器将首页设置全透明解决一闪而过问题

    点击图标进入指定浏览器将首页设置全透明解决一闪而过问题

    进入浏览器之前有一个页面闪了一下,那是因为从那个空白的首页跳过去的。解决的办法是把他变成透明的就好了
    2014-08-08
  • Android使用Recyclerview实现图片水平自动循环滚动效果

    Android使用Recyclerview实现图片水平自动循环滚动效果

    这篇文章主要为大家详细介绍了Android使用Recyclerview实现图片水平自动循环滚动效果,实现精彩的跑马灯效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • android暂停或停止其他音乐播放器的播放实现代码

    android暂停或停止其他音乐播放器的播放实现代码

    来自android自带的music源码,下面是广播接收的代码,通过发送广播来控制音乐的播放,停止等
    2013-11-11
  • Android性能之冷启动优化详析

    Android性能之冷启动优化详析

    这篇文章主要给大家介绍了关于Android性能之冷启动优化的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • listview Button始终放在底部示例

    listview Button始终放在底部示例

    android实现底部布局往往使用RelativeLayout的布局方式,以下的例子就是实现三层布局的底部布局的功能,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • Android隐藏和沉浸式虚拟按键NavigationBar的实现方法

    Android隐藏和沉浸式虚拟按键NavigationBar的实现方法

    今天小编就为大家分享一篇Android隐藏和沉浸式虚拟按键NavigationBar的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论