Người dùng phụ thuộc vào điện thoại và cần có một thiết bị hoạt động mọi lúc. Tuy nhiên, đôi khi thiết bị gặp phải vòng lặp khởi động lại, khiến người dùng phải gửi phiếu yêu cầu hỗ trợ hoặc yêu cầu bảo hành. Quá 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 (cấp độ API 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 Rescue Party (Bên 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 (Recovery mode) 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 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ụ được 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ẽ dần trở nên mạnh mẽ hơn trong việc xoá hoặc đặt lại. 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 một cách để xác nhận việc huỷ dữ liệu người dùng trước khi tiếp tục. Hệ thống khôi phục cũng nên 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 độ cứu hộ có thể mất 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ác cấp độ cứu hộ tuỳ chỉnh. Thời gian 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 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 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 USB đang hoạt động vì đó là một tín hiệu mạnh cho thấy ai đó đang gỡ lỗi thiết bị.
Để ghi đè việc ngăn chặn này, hãy chạy:
adb shell setprop persist.sys.enable_rescue 1Từ đó, kích hoạ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_servercấ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 cứu hộ. Rescue Party cũng ghi lại tất cả các thao tác 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 các nhật ký liên tục này trong phần Thông báo cảnh báo gói.