当我打开严格模式检测全部时,我的应用程序崩溃了应用程序的 super.onCreate() (即,在我让任何代码执行任何操作之前)。
我的应用程序 onCreate 打开严格模式如下
override fun onCreate() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(
StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath().build())
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath().build())
}
super.onCreate()
// Some other code
}
我得到的错误(位于super.onCreate()
)
D/StrictMode: StrictMode policy violation; ~duration=98 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=327711 violation=2
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1263)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:182)
at libcore.io.IoBridge.open(IoBridge.java:438)
at java.io.FileInputStream.<init>(FileInputStream.java:76)
at android.graphics.Typeface.getFullFlipFont(Typeface.java:584)
at android.graphics.Typeface.getFontPathFlipFont(Typeface.java:532)
at android.graphics.Typeface.SetFlipFonts(Typeface.java:719)
at android.graphics.Typeface.SetAppTypeFace(Typeface.java:846)
at android.app.Application.onCreate(Application.java:110)
at com.mypackage.MyApplication.onCreate(MyApplication.kt:40)
这是我们应该忽略的预期错误,还是我们应该修复的错误?
显然该错误是特定于设备的。它发生在 Samsung S7 上,但不会发生在 Nexus 6P 上。因此,这不是我要解决的问题。所以最好的办法就是抑制它。
下面是我如何抑制它的示例。您可以将这些函数包装到 Util 类中。
override fun onCreate() {
turnOnStrictMode()
permitDiskReads{
super.onCreate()
}
// Some other code
}
fun turnOnStrictMode() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(
StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath().build())
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath().build())
}
}
fun permitDiskReads(func: () -> Any) : Any {
if (BuildConfig.DEBUG) {
val oldThreadPolicy = StrictMode.getThreadPolicy()
StrictMode.setThreadPolicy(
StrictMode.ThreadPolicy.Builder(oldThreadPolicy)
.permitDiskReads().build())
val anyValue = func()
StrictMode.setThreadPolicy(oldThreadPolicy)
return anyValue
} else {
return func()
}
}
Refers to this https://medium.com/@elye.project/android-strict-mode-selective-code-suppression-37ee0d999f6b#.simbpoeen了解更多详情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)