StrictMode ——安卓严苛模式

摘要

        StrictMode是一款开发工具,自Android2.3引入。StrctMode通过设置线程或者虚拟机的违规规则,检测当前运行代码是否有违反规则的行为,如果存在将以设置的违规方式通知用户。

        我们接下来通过一个简单的例子来理解StrictMode。

1.简单例子

 public void onCreate() {
     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads() // 检测读磁盘
                 .detectDiskWrites() // 检测写磁盘
                 .detectNetwork()   // 检测网络范文
                 .penaltyLog()  // 如果有违规,通过日志打印
                 .build());
                 
         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                 .detectLeakedSqlLiteObjects()  // 检测内存泄漏
                 .detectLeakedClosableObjects()  // 检测内存泄漏
                 .penaltyLog() // 如果违规,打印违规日志
                 .penaltyDeath() // 如果违规,程序将崩溃
                 .build());
     }
     super.onCreate();
 }

        通过以上代码,在Activity的onCreate方法中设置的严苛模式。该模式仅在当前线程(主线程有效)。

        在当前线程,如果有读写磁盘操作,将被视为违规,并通过日志打印违规信息。如果存在上述两种泄漏,将打印违规日志,同时应用程序崩溃。

2. StrictMode详细说明

2.1、策略

  • StrictMode.ThreadPolicy

应用于某个线程的StrictMode策略

  • StrictMode.VmPolicy

应用于虚拟机进程中的所有线程的StrictMode策略

2.2、方法

  • ThreadPolicy.Builder中的一些方法:
  • detectAll() : 侦测一切潜在违规
  • detectCustomSlowCalls() : 侦测自定义的耗时操作
  • detectDiskReads() : 侦测磁盘读
  • detectDiskWrites() : 侦测磁盘写
  • detectNetwork() : 侦测网络操作
  • permitAll() : 禁用所有侦测
  • permitDiskReads() : 允许磁盘读
  • VmPolicy.Builder中的一些方法 :
  • detectAll() : 侦测一切潜在违规
  • detectActivityLeaks() : 侦测Activity(活动)泄露
  • detectLeakedClosableObjects() : 当显式中止方法调用之后,假如可被Closeable类或其他的对象没有被关闭。

2.3、处罚

对于每个策略,我们可以指定多个处罚形式,而处罚也是从最不严重的到最严重(从打印日志到直接crash(崩溃))依次执行。

  • penaltyDeath() : 违规时,直接使应用崩溃。
  • penaltyDialog() : 违规时,向开发者显示一个恼人的Dialog对话框。
  • penaltyLog() : 违规时,将违规信息写入系统日志。

2.4、回调

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值