Để cung cấp khoảng thời gian rảnh trong xe, Chế độ gara sẽ giữ cho hệ thống luôn thức để có thể thực thi các công việc trong JobScheduler
bị ràng buộc với trạng thái rảnh.
Chế độ gara là gì?
Trên các thiết bị được kết nối như điện thoại, người dùng dựa vào hệ thống để đảm bảo thiết bị hoạt động ổn định, được cập nhật và tối ưu hoá. Để đạt được trạng thái đó, nền tảng Android cung cấp một cửa sổ thời gian rảnh trong đó các ứng dụng có thể thực hiện các tác vụ khi người dùng không tương tác với thiết bị. Điện thoại được coi là rảnh khi người dùng không chạm vào điện thoại trong một khoảng thời gian dài (60 phút trở lên) và màn hình tắt. Không giống như điện thoại, khi không sử dụng, ô tô sẽ tắt, tức là ô tô không có khoảng thời gian rảnh. Chế độ gara đảm bảo thời gian rảnh trong ô tô.
Khi người dùng tắt ô tô, hệ thống sẽ chuyển sang Chế độ gara. Khi ô tô ở Chế độ gara, hệ thống sẽ bật nguồn, màn hình sẽ tắt và các công việc rảnh trong hàng đợi JobScheduler
sẽ được thực thi. Để triển khai Chế độ gara, hãy xem Nguyên tắc triển khai thiết bị.
Nguyên tắc triển khai thiết bị
Để kích hoạt Chế độ gara, khi tắt xe, Vehicle HAL (VHAL) phải gửi AP_POWER_STATE_REQ
với trạng thái SHUTDOWN_PREPARE
và tham số được đặt thành SHUTDOWN_ONLY
hoặc CAN_SLEEP
.
Để trạng thái SHUTDOWN_PREPARE
có hiệu lực, VHAL phải chỉ định hai tham số (trạng thái và tham số bổ sung) cho lệnh AP_POWER_STATE_REQ
. Điều này cho phép thiết bị chuyển sang Chế độ nhà để xe, phát hiện các công việc đã lên lịch trong JobScheduler
và ngăn hệ thống tiếp tục tạm ngưng hoặc tắt cho đến khi các công việc hoàn tất.
Làm cách nào để quá trình triển khai thiết bị kết nối với khung Android?
Đối với Chế độ gara, khung này yêu cầu VHAL gia hạn thời gian tắt cho đến khi vượt quá thời lượng bắt buộc hoặc tất cả công việc đã được thực thi, tại thời điểm đó hệ thống sẽ tắt. Trong một số trường hợp cụ thể được xác định trong CDD, việc triển khai thiết bị có thể tắt hệ thống sớm hơn. Để biết thông tin chi tiết về các yêu cầu về khả năng tương thích với Android, hãy xem Tài liệu định nghĩa về khả năng tương thích (CDD) của Android.
Nếu VHAL phải tắt hệ thống trước khi Chế độ gara hoàn tất, thì VHAL có thể phát SHUTDOWN_PREPARE
với tham số được đặt thành SHUTDOWN_IMMEDIATELY
hoặc SLEEP_IMMEDIATELY
. Việc triển khai thiết bị chỉ có thể sử dụng tính năng này trong một số trường hợp cụ thể, thường là khi không có tài nguyên cần thiết để duy trì hoạt động của hệ thống. Ví dụ: khi dung lượng pin không đủ.
Hình 1. Quy trình Chế độ nhà để xe
Nhà phát triển ứng dụng làm việc với Chế độ gara như thế nào?
Các ứng dụng và dịch vụ không tương tác trực tiếp với Chế độ gara. Thay vào đó, ứng dụng lên lịch công việc trong JobScheduler
.
Những công việc bị ràng buộc bởi trạng thái rảnh sẽ được thực thi trong Chế độ gara.
Đoạn mã sau đây cho biết cách lên lịch chạy một công việc trong Chế độ gara:
public class MyGarageModeJob extends JobService { ... } Context context = ...; int jobId = ...; ComponentName myGarageModeJobName = new componentName(context, MyGarageModeJob.class); JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName) .setRequiresDeviceIdle(true); // Example of an optional constraint: infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED); JobScheduler jobScheduler = (JobScheduler) context .getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(infoBuilder.build());
Chế độ gỡ lỗi Garage
Cách gỡ lỗi Chế độ gara:- Cách bật các danh mục ghi nhật ký liên quan đến Chế độ gara:
adb shell stop adb shell setprop log.tag.GarageMode VERBOSE adb shell setprop log.tag.Finsky VERBOSE adb shell setprop log.tag.CAR.POWER VERBOSE adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE adb shell start
- Cách xem kết quả logcat để cho biết Chế độ gara đang bắt đầu:
GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
- Cách xác định đầu ra logcat để cho biết Chế độ gara đã hoàn tất (bị huỷ hoặc hoàn tất):
hoặc[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
Chế độ gara phụ thuộc vào trạng thái nguồn của xe như mô tả ở trên.
- Xem lại kết quả logcat để cho biết bạn đã nhập đúng trạng thái nguồn:
CAR.POWER: starting shutdown prepare without Garage Mode GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode CAR.POWER: send shutdown prepare CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0