Để đạt được điều này, bạn phải làm hai điều:
- Tránh "Buộc đóng" - cách tiêu chuẩn của sự cố ứng dụng.
- Thiết lập cơ chế khởi động lại khi sự cố vẫn xảy ra.
Xem bên dưới cách thực hiện những điều này:
Gọi Thread.setDefaultUncaughtExceptionHandler()để bắt tất cả các ngoại lệ chưa được ghi, trong trường hợp đó uncaughtException()phương thức sẽ được gọi. "Buộc đóng" sẽ không xuất hiện và ứng dụng sẽ không phản hồi, đó không phải là một điều khá tốt. Để khởi động lại ứng dụng của bạn khi nó gặp sự cố, bạn nên làm như sau:
Trong onCreatephương thức, trong hoạt động chính của bạn, hãy khởi tạo một PendingIntentthành viên:
Intent intent = PendingIntent.getActivity(
YourApplication.getInstance().getBaseContext(),
0,
new Intent(getIntent()),
getIntent().getFlags());
Sau đó đặt những điều sau vào uncaughtException()phương pháp của bạn :
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
Bạn cũng phải gọi System.exit(), nếu không sẽ không hoạt động. Bằng cách này, ứng dụng của bạn sẽ khởi động lại sau 2 giây.
Cuối cùng, bạn có thể đặt một số cờ trong ý định của bạn rằng ứng dụng bị lỗi và trong onCreate()phương pháp của bạn, bạn có thể hiển thị hộp thoại "Tôi xin lỗi, ứng dụng bị lỗi, hy vọng không bao giờ xảy ra nữa :)".