Tôi hỏi this câu hỏi một số thời gian trở lại trên Stackoverflow
, câu trả lời làm việc cho tôi, Nó đè handleUncaughtException
, tôi lưu các ngoại lệ và ném mặc định Unfortunately app has stopped working
, nhưng khi tôi tích hợp này trong ứng dụng của tôi , Tôi đang đối mặt với một vấn đề.Làm thế nào để ghi đè handleUncaughtException mà không thay đổi functionallity nó
Đây là câu trả lời tôi nhận được.
private Thread.UncaughtExceptionHandler defaultExceptionHandler;
public void registerCrash(){
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e){
handleUncaughtException (thread, e);
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
}
});
}
gì nó làm, đầu tiên nó đi để handleUncaughtException (thread, e);
i lưu nhật ký sự cố trong phương pháp này, sau đó nó đọc dòng này
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
ở đây chúng tôi ném ngoại lệ còn tự do nữa, vì vậy nó đi để là người đầu tiên một lần nữa, và một lần nữa tiết kiệm ngoại lệ, và điều này đi trong vòng lặp, và ứng dụng sẽ không đáp ứng.
Điều tôi muốn là lưu nhật ký sự cố và sau đó hiển thị thông báo mặc định Unfortunate
cho người dùng.
EDIT
Trong lần khởi chạy ứng dụng nó đọc này;
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Khi ứng dụng bị treo, nó đọc những dòng này
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e){
handleUncaughtException (thread, e); //Custom Method
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
}
Vì vậy, nó đầu tiên đi vào handleUncaughtException()
có tôi đã cung cấp thực hiện tùy chỉnh, sau đó nó đi vào này;
if(defaultExceptionHandler != null){
defaultExceptionHandler.uncaughtException(thread, e);
}
defaultExceptionHandler
không bao giờ là rỗng; Vì vậy, nó đi trong một vòng lặp trong trường hợp nhiều tai nạn.
Tôi đã thử thêm count
ở đó, nhưng mỗi lần là 0
.
'Vì vậy, nó đi trong một vòng lặp trong trường hợp nhiều Bạn có thể chỉ ra một tình huống xảy ra? Điều gì khiến một ngoại lệ khác xảy ra? – azizbekian
@azizbekian: Tôi không thể tìm ra các bước để khôi phục lại nó. Điều này không xảy ra mọi lúc, nhưng đôi khi – Kirmani88
phương thức defaultExceptionHandler là gì. Đó có phải là phương pháp của riêng bạn? nếu có, hãy viết mã phương thức đó. Và mã phương thức postUUaughtException (thread, e) quá –