Người dùng phụ thuộc vào điện thoại và luôn cần một thiết bị hoạt động được. Tuy nhiên, đôi khi thiết bị gặp phải tình trạng khởi động lại liên tục, khiến người dùng phải gửi phiếu yêu cầu hỗ trợ hoặc thắc mắc về bảo hành. Quy trình này gây khó chịu cho người dùng và tốn kém cho các nhà sản xuất thiết bị và nhà mạng.
Android 8.0 (API cấp 26) trở lên có một tính năng kích hoạt quy trình khôi phục khi phát hiện thấy các thành phần hệ thống cốt lõi bị kẹt trong vòng lặp sự cố. Khi nhận được tín hiệu này, tính năng Cứu hộ sẽ thực hiện một loạt hành động để khôi phục thiết bị. Trong trường hợp cuối cùng, Rescue Party sẽ khởi động lại thiết bị ở chế độ khôi phục và nhắc người dùng thực hiện thao tác đặt lại về trạng thái ban đầu.
Triển khai
Rescue Party được bật theo mặc định và quá trình triển khai nằm trong /services/core/java/com/android/server/RescueParty.java. Rescue Party nhận được thông tin về các sự kiện khởi động và sự cố, đồng thời bắt đầu nếu:
system_serverkhởi động lại hơn 5 lần trong 5 phút.- Một ứng dụng hệ thống liên tục gặp sự cố hơn 5 lần trong 30 giây.
Khi phát hiện một trong những tình huống này, Rescue Party sẽ chuyển sang cấp độ cứu hộ tiếp theo, xử lý tác vụ liên kết với cấp độ đó và cho phép thiết bị tiếp tục để xem thiết bị có khôi phục được hay không. Mỗi cấp độ sẽ xoá hoặc đặt lại nhiều dữ liệu hơn. Cấp độ cuối cùng nhắc người dùng đặt lại thiết bị về trạng thái ban đầu.
Rescue Party không yêu cầu hỗ trợ phần cứng đặc biệt. Nếu được triển khai, hệ thống khôi phục của thiết bị phải phản hồi lệnh --prompt_and_wipe_data và thiết bị phải cung cấp cho người dùng cách xác nhận mọi hoạt động huỷ dữ liệu người dùng trước khi tiếp tục. Hệ thống khôi phục cũng phải cung cấp cho người dùng lựa chọn thử khởi động lại thiết bị.
Vì mỗi cấp độ khôi phục có thể thêm tối đa 5 phút trước khi thiết bị hoạt động trở lại, nên các nhà sản xuất thiết bị không nên thêm cấp độ khôi phục tuỳ chỉnh. Thời gian sử dụng thiết bị không hoạt động càng lâu thì người dùng càng có nhiều khả năng bắt đầu yêu cầu hỗ trợ hoặc bảo hành thay vì tự khôi phục thiết bị.
Xác nhận kết quả
Rescue Party sẽ ngăn chặn tất cả các sự kiện cứu hộ khi thiết bị có kết nối dữ liệu qua USB đang hoạt động vì đó là một tín hiệu mạnh cho thấy có người đang gỡ lỗi thiết bị.
Để ghi đè chế độ chặn này, hãy chạy:
adb shell setprop persist.sys.enable_rescue 1Từ đó, hãy kích hoạt một vòng lặp sự cố hệ thống hoặc giao diện người dùng:
Để kích hoạt vòng lặp sự cố
system_serverở cấp thấp, hãy chạy:adb shell setprop debug.crash_system 1adb shell stopadb shell startĐể kích hoạt vòng lặp sự cố SystemUI ở cấp độ trung bình, hãy chạy:
adb shell setprop debug.crash_sysui 1
Cả hai vòng lặp sự cố đều khởi động logic khôi phục. Rescue Party cũng ghi lại tất cả các hoạt động cứu hộ vào nhật ký PackageManager liên tục được lưu trữ tại /data/system/uiderrors.txt để kiểm tra và gỡ lỗi sau này. Báo cáo lỗi cũng bao gồm những nhật ký liên tục này trong phần Thông báo cảnh báo về gói.