在应用程序生产阶段使用 StrictMode

Using StrictMode in app production phase

我知道StrictMode主要用于应用开发阶段,但根​​据我的应用需求,出现ANR是不可接受的,而出现崩溃是可以接受的,并且StrictMode提供一种防止 ANR 对话框的方法:

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll()
            .penaltyLog().penaltyDeath().build());

如果我在应用程序生产阶段使用它会怎样?当应用程序在使用 StrictMode 时出现 ANR 时会发生什么?它会死机、崩溃还是等到再次响应?

严格模式默认关闭,用户需要在 Android 中输入 "Developer's mode" 才能启用。
这使得使用 StrictMode 的解决方案变得无关紧要。

由于内存不足或其他应用阻塞 CPU.
等情况,ANR 可能会在极少数情况下完全超出您的控制范围 但是,您只需将访问存储或网络的每个操作移至异步任务,即可将发生 ANR 的可能性降至最低。
在我的软件中,我将这行代码添加到所有危险的地方:

assert !Util.isMainThread():"woh! what am I doing on the main thread??"

并在某些 Util class:

中使用此方法
public static boolean isMainThread() {
    return Looper.myLooper().equals(Looper.getMainLooper());
}

...以及从命令行快速启用断言的有用提示:
adb shell setprop debug.assert 10 禁用。