【发布时间】:2018-09-28 11:23:34
【问题描述】:
我在某处读到,通过使用 StrictMode,我们可以避免 Android 中的 ANR。我试过了,下面是代码
public class MyApplication extends Application {
@Override
public void onCreate() {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyFlashScreen()
.penaltyDeath()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.build());
super.onCreate();
}
我尝试生成 ANR 用于如下测试目的:
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("kishan","onTouchEvent");
while(true) {}
}
但是,ANR 仍然出现在屏幕上。如何使用 StrictMode 避免 ANR?有可能吗?
【问题讨论】:
-
StrictMode 可以为您提供一些信息(“
StrictMode是一个开发人员工具,它可以检测您可能不小心做的事情并引起您的注意,以便您修复它们。”)。但是如果你在 UI 线程上做了太多的工作(ANR 的常见原因),那么你需要使用后台线程/AsyncTasks 来承受压力。见here -
@JonGoodwin 哦,你的意思是它不会关闭 ANR
-
没有这种运气,它只会在发现您可能想看的东西时发出警告,您必须解决问题!
-
@JonGoodwin 好的..谢谢
标签: android android-anr-dialog android-strictmode