一,问题描述
1,在Application类中做了如下操作,目的是全局处理未捕获的异常,尝试实现App永不崩溃:
// application的OnCreate方法中
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//主线程异常拦截
while (true) {
try {
Looper.loop();//主线程的异常会从这里抛出
} catch (Throwable e) {
e.printStackTrace();
}
}
}
});
2,打脸的是,在Activity监听物理返回键,并在其中抛出运行时异常,上述代码虽然能捕获异常,App也没崩溃,但是界面会卡死。
只要按**物理返回键**,无论是模拟器还是真机,都会卡死,而且必现。
// activity 中监听物理返回键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
throw new RuntimeException("dsds");
}
return super.onKeyDown(keyCode, event);
}
请问,这是为啥