Android代码检测优化之StricMode

本文详细介绍了Android StrictMode的使用方法及其提供的两种策略:ThreadPolicy和VmPolicy。ThreadPolicy主要用于检测主线程中的磁盘读写、网络操作及自定义代码执行速度过慢的问题;而VmPolicy则关注于虚拟机层面的问题,如Activity内存泄露、SQLite内存泄露等。通过开启StrictMode,开发者可以在开发过程中及时发现问题并进行优化。

StrictMode类是Android 2.3 (API 9)增加的一个工具类;可以用来帮助开发者改进所编写的应用代码.并且提供各种策略随时检查和报告开发者所存在的问题

官方文档(Google中国)

使用StrictMode

在应用程序入口Application,Activity或者其他Application组件的onCreate()方法中调用以下代码开启StrictMode:

public void onCreate() {
     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());
     }
     super.onCreate();
 }
StrictMode的两个策略
  • ThreadPolicy 检测主线程中磁盘读写操作,网络操作,及调用的自定义代码是否执行得比较慢

以下主要方法:

detectNetwork(): 检查UI线程中是否有网络请求操作
detectDiskReads()和detectDiskReads(): 磁盘读写检查
detectCustomSlowCalls(): 发现UI线程调用执行较慢的方法;和 StrictMode.noteSlowCall 配合使用
penaltyDeath(): 当触发违规条件时,Crash当前应用程序
penaltyDeathOnNetwork(): 当触发网络违规时,Crash当前应用程序
penaltyDialog(): 触发违规时,显示对违规信息对话框
penaltyFlashScreen(): 会造成屏幕闪烁,不过一般的设备可能没有这个功能
penaltyDropBox(): 将违规信息记录到 dropbox(/data/system/dropbox)
permitCustomSlowCalls()、permitDiskReads ()、permitDiskWrites()、permitNetwork: 如果你想关闭某一项检测,可以使用对应的permit*方法
  • VmPolicy 用于虚拟机方面的策略.如Activity内存泄露,SQLite内存泄露,资源未释放等

以下主要方法:

detectLeakedClosableObjects()detectLeakedSqlLiteObjects(): 资源没有正确关闭时回触发
detectLeakedRegistrationObjects(): BroadcastReceiver 或者 ServiceConnection 注册类对象是否被正确释放

Tips:

下班后,我会打开StricMode然后跑一个正常人操作的Monkey脚本,第二天查看log改善程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值