Trong onCreate của tôi() để thiết lập một handler UncaughtException như sau:Làm thế nào để tái ném một ngoại lệ
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
Log.e(getMethodName(2), "uncaughtException", throwable);
android.os.Process.killProcess(android.os.Process.myPid());
}
});
Nó hoạt động OK, nhưng tôi muốn để có được trở lại hành vi mặc định của hệ thống hiển thị force- đóng hộp thoại cho người dùng.
Nếu tôi cố gắng thay thế cuộc gọi KillProcess()
bằng một trình biên dịch throw throwable
thì tôi cần phải bao quanh nó bằng một lần thử/nắm bắt.
Nếu tôi bao quanh nó với một try/catch:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
try {
Log.e(getMethodName(2), "uncaughtException", throwable);
throw throwable;
}
catch (Exception e) {
}
finally {
}
}
});
Trình biên dịch vẫn phàn nàn rằng throw throwable
cần phải được bao quanh với một try/catch.
Tôi làm cách nào để ném lại điều đó? Như vậy, ngoại trừ thông tin Log.e()
hệ thống hoạt động chính xác như trước: Như tôi chưa bao giờ đặt trình xử lý UncaughtException mặc định.
Xin lỗi, nhưng điều đó dẫn đến luồng vô tận của Ngoại lệ không bắt buộc và hoàn toàn không có hộp thoại cưỡng bức nào. Không phải những gì tôi đang tìm kiếm. –
Tôi đã cập nhật câu trả lời. – Jeshurun
Hoạt động tuyệt vời! Đang chấp nhận +1. –