2010-05-12 52 views
7

Tôi đang nghĩ đến việc thiết lập trình xử lý ngoại lệ mặc định toàn cầu cho ứng dụng di động (Android) của tôi (sử dụng cú pháp Java) bằng cách sử dụng cuộc gọi Thread.setDefaultUncaughtExceptionHandler(...). Tôi đang nghĩ đến việc chỉ hiển thị Hộp thoại cảnh báo với thông điệp thích hợp cho người dùng.Xử lý ngoại lệ toàn cầu trong Java

Có bế tắc, cảnh báo và quy tắc nào cần phải tuân theo khi đặt DefaultExceptionHandlers không? Bất kỳ phương pháp hay nhất nào như đảm bảo rằng quá trình bị giết, dấu vết ngăn xếp đầy đủ được ghi vào nhật ký, v.v ...?

Liên kết đến tài liệu, hướng dẫn, v.v. có thể ném một số ánh sáng vào điều này được hoan nghênh.

Cảm ơn.

Trả lời

2
  • Tên có một chút gây hiểu nhầm, bởi vì sử dụng phương pháp đó sẽ đặt trình xử lý ngoại lệ mặc định cho tất cả các chủ đề.
  • Đảm bảo không có ngoại lệ nào có thể được ném từ trình xử lý ngoại lệ của bạn.
  • Nếu bạn đang thực hiện các công cụ GUI từ trình xử lý ngoại lệ của mình, hãy đảm bảo bạn đang làm việc đó từ đúng chuỗi.
  • Ngoại lệ không bắt buộc sẽ chỉ dừng chuỗi nơi ngoại lệ xảy ra, nếu điều đó cũng khiến quá trình chấm dứt phụ thuộc vào bất kỳ chủ đề nào khác có thể đang chạy.
+0

"Nếu bạn đang làm công cụ GUI từ trình xử lý ngoại lệ của mình, hãy đảm bảo bạn đang làm việc đó từ đúng chuỗi". Điều đó có nghĩa là gì? – Gratzi

+0

Điều đó có nghĩa là các công cụ GUI nên được thực hiện trong chuỗi EDT (sử dụng 'invokeLater' nếu cần) Nếu không thì những điều kỳ lạ có thể xảy ra. –

1

Một vấn đề có thể xảy ra khi tạo trình xử lý ngoại lệ toàn cục là bạn có thể gặp khó khăn trong một loạt ngoại lệ - một số ngoại lệ sẽ được gửi đi lặp lại trừ khi chương trình bị chấm dứt.

Nếu bạn có nghĩa là khi một ngoại lệ được ném, một thông báo sẽ được hiển thị sau đó ứng dụng được chấm dứt, sau đó bạn sẽ ổn.

+0

Nếu trong phương pháp uncaughtException của tôi, tôi chỉ hiển thị một AlertDialog sẽ Runtime tự động giết/chấm dứt quá trình hoặc tôi sẽ phải rõ ràng với điều này? – Samuh

+0

Nếu bạn hiển thị AlertDialog trong luồng mã thông thường, nó có bị tự động tắt không? – Finbarr