StrictMode

StrictMode

严苛模式,Android 提供的一种运行时检测机制

检测两大策略:线程策略,虚拟机策略

官方地址:https://developer.android.com/reference/android/os/StrictMode

注意:如需启用严苛模式需尽早启动来使其生效

线程策略

1
2
3
4
5
6
7
8
9
10
11
12
13
StrictMode.setThreadPolicy(
ThreadPolicy.Builder()
.detectCustomSlowCalls() // 检测耗时调用
.detectResourceMismatches() // 检测定义的资源和getter调用之间的不匹配
.detectUnbufferedIo() // 检测无缓冲输入/输出操作
.detectDiskReads() // 检测磁盘读取
.detectDiskWrites() // 检测磁盘写入
.detectNetwork() // 检测网络操作
.penaltyLog() // 当检测相应的内容时通过日志打印出来
.penaltyDeath() // 当检测相应的内容时应用崩溃
.penaltyDialog() // 当检测相应的内容时弹窗
.build()
)

虚拟机策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
StrictMode.setVmPolicy(
VmPolicy.Builder()
.setClassInstanceLimit() // 指定class允许的实例数量
.detectUntaggedSockets() // 检测未加标签的套接字【注:标签用来调查应用内部网络的使用情况】
.detectCleartextNetwork() // 检测应用是否有使用明文网络
.detectActivityLeaks() // 检测Activity泄漏
.detectContentUriWithoutPermission() // 检测content://Uri而没有设置相应权限
.detectCredentialProtectedWhileLocked() // 检测用户被锁定时访问受凭证保护的存储区域
.detectFileUriExposure() // 应用向另一个应用公开文件时检测
.detectImplicitDirectBoot()
.detectLeakedClosableObjects() // 检测Closeable未关闭
.detectLeakedRegistrationObjects() // 检测广播监听
.detectLeakedSqlLiteObjects() // 检测Sqlite对象泄漏
.detectNonSdkApiUsage() // 检测不属于公共Android SDK的api反射用法
.penaltyLog() // 当检测相应的内容时通过日志打印出来
.penaltyDeath() // 当检测相应的内容时应用崩溃
.build()
)