車庫模式

如要為車輛提供閒置時間,車庫模式會保持系統 醒來後工作 JobScheduler 限制 可以執行。

什麼是車庫模式?

在手機等連線裝置上,使用者必須仰賴系統來確保裝置 穩定性、安裝與最新狀態 並經過最佳化調整為了達到這個狀態,Android 平台 提供了 閒置 時間 期間,應用程式能在使用者未正常運作的情況下執行工作 都會與裝置互動如果使用者沒有碰觸手機,系統就會將手機視為「閒置」 等候時間較長 (60 分鐘以上),而且螢幕會關閉。 與手機不同的是,在車輛未使用時,車輛已關機 (表示車輛已關機), 沒有 閒置時間 視窗。車庫模式可確保車內閒置時間。

使用者關閉汽車時,系統會進入車庫模式。雖然 汽車處於車庫模式、系統已開啟、螢幕已關閉 系統會執行 JobScheduler 佇列中的閒置工作。如要實作車庫模式,請參閱 裝置實作指南

裝置實作指南

如要啟用車庫模式,在關上車輛時,車輛 HAL (VHAL) 必須傳送 AP_POWER_STATE_REQ,狀態為 SHUTDOWN_PREPARE 且參數設為 SHUTDOWN_ONLYCAN_SLEEP

如要讓 SHUTDOWN_PREPARE 的狀態生效,VHAL 必須指定兩個值 AP_POWER_STATE_REQ指令的參數 (state 和其他參數)。這樣裝置就能進入車庫模式, 偵測已排定的工作位置 JobScheduler敬上 避免系統繼續暫停或關閉,直到工作執行為止 狀態。

裝置實作項目如何與 Android 架構相互連結?

針對車庫模式,架構會要求 VHAL 延長關閉時間 直到超過要求的持續時間或所有工作都執行完畢為止。 系統就會在此時關閉容器在特定情況下 停用的裝置導入作業可以更快關閉系統。瞭解詳情 如要進一步瞭解 Android 相容性需求,請參閱 相容性定義說明文件 (CDD)

如果 VHAL 必須在車庫模式完成之前關閉系統,VHAL 可以發出 SHUTDOWN_PREPARE,並將參數設為 SHUTDOWN_IMMEDIATELYSLEEP_IMMEDIATELY。裝置 導入方法「只有」可在特定情況下使用,通常是 無法使用維持系統運作所需的資源時。適用對象 例如電池容量不足的時候

車庫模式

圖 1. 車庫模式流程

應用程式開發人員如何使用車庫模式?

應用程式和服務不會直接與車庫模式互動。 應用程式排定工作的時間 JobScheduler。 這些工作受限於 idleness 會在車庫模式下執行。

以下程式碼顯示如何安排工作在車庫模式期間執行:

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

偵錯車庫模式

如何對車庫模式進行偵錯:
  1. 如何啟用與車庫模式相關的記錄類別:
    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. 查看 logcat 輸出內容以指出車庫模式正在啟動:
    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. 為了判斷 logcat 輸出結果以指出車庫模式已完成 (取消或 已完成):
    [GarageMode]: GarageMode was canceled
    
    敬上
    [GarageMode]: GarageMode completed normally
    

    車庫模式取決於車輛的電源狀態,如所述

  4. 查看 logcat 輸出結果,以指出輸入的電源狀態正確:
    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