Chế độ nhà xe

Để khoảng thời gian xe không hoạt động, Chế độ nhà để xe giúp hệ thống thức để các công việc trong JobScheduler bị ràng buộc bằng Có thể thực thi trạng thái rảnh.

Chế độ nhà để xe là gì?

Trên các thiết bị thông minh như điện thoại, người dùng dựa vào hệ thống này để đảm bảo thiết bị đều ổn định, được cập nhật và được tối ưu hoá. Để đạt được trạng thái đó, nền tảng Android cung cấp không hoạt động thời gian khoảng thời gian ứ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à ở trạng thái không hoạt động khi người dùng không chạm vào màn hình sẽ tắt trong một khoảng thời gian dài (60 phút trở lên). Không giống như điện thoại, khi không sử dụng ô tô, ô tô sẽ bị tắt, tức là ô tô này không có thời gian không hoạt động cửa sổ. Chế độ nhà để xe đảm bảo thời gian không hoạt động trên ô tô.

Khi người dùng tắt ô tô, hệ thống sẽ chuyển sang Chế độ nhà để xe. Trong khi ô tô đang ở Chế độ gara, hệ thống đã bật nguồn, màn hình cũng tắt và các công việc ở trạng thái rảnh trong hàng đợi JobScheduler sẽ được thực thi. Để triển khai Chế độ nhà xe, 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ế độ nhà để xe, khi tắt xe, HAL (Lớp trừu tượng phần cứng) cho xe phải gửi AP_POWER_STATE_REQ có 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 các tham số (trạng thái và tham số bổ sung) cho lệnh AP_POWER_STATE_REQ. Thao tác này cho phép thiết bị chuyển sang Chế độ nhà để xe, giúp phát hiện các công việc theo lịch biểu trong JobScheduler và ngăn hệ thống tiếp tục tạm ngưng hoặc tắt cho đến khi công việc đã hoàn tất.

Quá trình triển khai thiết bị kết nối với khung Android như thế nào?

Đối với Chế độ nhà để xe, khung này yêu cầu VHAL để kéo dài 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ác công việc đã được thực thi, khi đó hệ thống 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 thông tin 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).

Nếu VHAL phải tắt hệ thống trước khi Chế độ nhà để xe hoàn tất, VHAL có thể SHUTDOWN_PREPARE với thông số được đặt thành SHUTDOWN_IMMEDIATELY hoặc SLEEP_IMMEDIATELY. Thiết bị trong những trường hợp cụ thể chỉ dùng được, khi các tài nguyên cần thiết để giúp hệ thống hoạt động không có sẵn. Cho ví dụ: khi không đủ dung lượng pin.

Chế độ nhà để xe

Hình 1. Quy trình ở Chế độ nhà xe

Nhà phát triển ứng dụng làm việc với Chế độ nhà xe bằng cách nào?

Các ứng dụng và dịch vụ không tương tác trực tiếp với Chế độ nhà để xe. Thay vào đó, ứng dụng lên lịch công việc ở JobScheduler. Những công việc bị ràng buộc bởi không hoạt động sẽ được thực thi trong Chế độ nhà để xe.

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

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());

Gỡ lỗi Chế độ nhà xe

Cách gỡ lỗi Chế độ nhà để xe:
  1. Để bật các danh mục ghi nhật ký liên quan đến Chế độ nhà để xe:
    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. Để kiểm tra kết quả logcat nhằm cho biết Chế độ nhà để xe đang khởi động:
    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 đầu ra logcat nhằm cho biết Chế độ nhà để xe đã kết thúc (đã bị huỷ hoặc đã hoàn tất):
    [GarageMode]: GarageMode was canceled
    
    hoặc
    [GarageMode]: GarageMode completed normally
    

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

  4. Xem xét đầu ra logcat để cho biết đã 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