2016-09-30 15 views
8

Tôi vừa mới học về Log.wtf ("Thất bại khủng khiếp" lol) và tôi tự hỏi khi nào tôi nên sử dụng nó.Log.wtf so với ngoại lệ không được xử lý

  1. Sự khác nhau giữa việc gọi Log.wtf với ngoại lệ là gì và để ngoại lệ không được giải quyết (sự cố)?
  2. Điều này ảnh hưởng như thế nào đến báo cáo sự cố trong Bảng điều khiển dành cho nhà phát triển trên Google Play?
  3. Tôi thường ném một số IllegalStateException cho các điều kiện bất ngờ. Tôi có nên cân nhắc gọi số Log.wtf thay thế không?

Edit:

Xem thêm: Under what circumstances will Android's Log.wtf terminate my app?

Trả lời

4

Log.wtf làm là viết một ngoại lệ và dấu vết ngăn xếp của nó trong nhật ký, và chỉ có vậy. Nó không bắt và ném ngoại lệ. Vì vậy,

  1. Sự khác biệt là ngoại lệ được ghi nhật ký hay không. Ngoại lệ vẫn chưa được giải quyết.

  2. Nó không ảnh hưởng đến báo cáo sự cố.

  3. Nếu bạn muốn đăng nhập, hãy tiếp tục. Nhưng bạn sẽ muốn tiếp tục ném IllegalStateException.

EDIT

tôi đã cố gắng gỡ lỗi và bước vào Log.wtf nhưng không có may mắn.

Điều tôi đã tìm thấy là khá nhiều nội dung được trả lời trong câu hỏi được liên kết. Có vẻ như trong "xử lý thất bại mặc định khủng khiếp" Log.wtf tạo ra một ngoại lệ nội bộ (TerribleFailure) kết thúc tốt đẹp bất kỳ ngoại lệ nhất định nào. Sau đó, nó gọi RuntimeInit.wtf(). Javadoc của nó nói:

Báo cáo lỗi nghiêm trọng trong quy trình hiện tại. Có thể hoặc không thể gây ra quá trình chấm dứt (phụ thuộc vào cài đặt hệ thống).

Tôi đoán hành vi của Log.wtf tùy thuộc vào nhà sản xuất thiết bị. Sony C6503 của tôi dường như không gây bất kỳ ngoại lệ hoặc giết quá trình.

Một số tài liệu tham khảo mã nguồn mở:

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/util/Log.java

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/com/android/internal/os/RuntimeInit.java

+0

lẽ Log.wtf không ném ngoại lệ nhưng nó không chấm dứt các ứng dụng, ít nhất là thỉnh thoảng. Nếu nó không chấm dứt bằng cách ném ngoại lệ, thì điều đó sẽ ảnh hưởng đến báo cáo sự cố, nếu tôi nhận được báo cáo nào cả. – cambunctious

+0

@cambunctious yes, có thể vậy. Từ mã i liên kết, internals Android xử lý ngoại lệ và giết chết quá trình trong một số trường hợp – nandsito

+0

Có thể cho một thực hiện Log.wtf để chấm dứt các ứng dụng mà không bị rơi và gây ra một báo cáo tai nạn? – cambunctious

0

ngoại lệ Unhandled chưa đăng theo mặc định. Log.wtf có thể hoặc không thể làm hỏng ứng dụng. Nếu bạn vượt qua một ngoại lệ cho Log.wtf và nó bị treo, thì bạn sẽ nhận được một dấu vết ngăn xếp tương tự như những gì bạn sẽ nhận được nếu ngoại lệ không được xử lý. Sau khi gọi Log.wtf, bạn nên (lại) ném một ngoại lệ nếu bạn muốn đảm bảo một vụ tai nạn (mà không bắt nó tất nhiên).

Có thể có trường hợp sử dụng cụ thể cho Log.wtf, nhưng nếu bạn không chắc chắn, có thể tốt hơn nên sử dụng Log.e thay thế.