在应用程序生产阶段使用 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 1
或 0
禁用。
我知道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 1
或 0
禁用。