Chế độ ga ra

Để cung cấp khoảng thời gian nhàn rỗi cho xe, Chế độ Garage giữ cho hệ thống luôn hoạt động để có thể thực thi các công việc trong JobScheduler bị ràng buộc bởi tình trạng không hoạt động .

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ập nhật và tối ưu hóa. Để đạt được trạng thái đó, nền tảng Android cung cấp một khoảng thời gian nhàn rỗi 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à không hoạt động khi người dùng không chạm vào nó trong 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 ô tô không được sử dụng, nó sẽ tắt, nghĩa là ô tô không có cửa sổ thời gian rảnh . Chế độ Garage đảm bảo thời gian nhàn rỗi trong xe.

Khi người dùng tắt xe, hệ thống sẽ chuyển sang Chế độ Garage. Khi ô tô đang ở Chế độ gara, hệ thống sẽ bật, màn hình tắt và các công việc nhàn rỗi trong hàng đợi JobScheduler sẽ được thực thi. Để triển khai Chế độ Garage, hãy xem Hướng dẫn triển khai thiết bị .

Nguyên tắc triển khai thiết bị

Để kích hoạt Chế độ Garage, khi tắt xe, Xe HAL (VHAL) phải gửi AP_POWER_STATE_REQ với trạng thái SHUTDOWN_PREPARE với 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ị vào Chế độ Garage, chế độ này 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 dừng hoặc tắt cho đến khi công việc hoàn thành.

Làm cách nào để triển khai thiết bị kết nối với khung Android?

Đối với Chế độ Garage, khung yêu cầu VHAL kéo dài thời gian tắt máy cho đến khi vượt quá thời lượng yêu cầu hoặc tất cả công việc đã được thực thi, lúc đó hệ thống sẽ tắt. Trong các 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 chi tiết về các yêu cầu tương thích với Android, hãy xem Tài liệu Định nghĩa Tương thích Android (CDD) .

Nếu VHAL phải tắt hệ thống trước khi Chế độ Garage hoàn tất, VHAL có thể phát hành 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 những trường hợp cụ thể, thường là khi không có sẵn 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 đủ.

Chế độ gara

Hình 1. Luồng Chế độ Gara

Các nhà phát triển ứng dụng làm việc với Chế độ Garage 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ế độ Garage. Thay vào đó, các ứng dụng sẽ lên lịch công việc trong JobScheduler . Những công việc bị hạn chế bởi tình trạng nhàn rỗi sẽ được thực thi trong Chế độ Garage.

Đoạn mã sau đây cho biết cách lên lịch chạy công việc trong Chế độ Garage:

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ế độ gara gỡ lỗi

Để gỡ lỗi Chế độ Garage:
  1. Để bật các danh mục ghi nhật ký có liên quan đến Chế độ Garage:
    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
    
  2. Để xem lại đầu ra logcat nhằm cho biết rằng Chế độ Garage đ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
    
  3. Để xác định rằng đầu ra logcat cho biết Chế độ Garage đã kết thúc (đã hủy hoặc đã hoàn thành):
    [GarageMode]: GarageMode was canceled
    
    hoặc
    [GarageMode]: GarageMode completed normally
    

    Chế độ Garage phụ thuộc vào trạng thái năng lượng của xe như mô tả ở trên.

  4. Xem lại đầu ra logcat để cho biết trạng thái nguồn chính xác đã được nhập:
    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