車庫模式

為了提供空閒時段的車輛,車庫模式使系統保持清醒,這樣在工作的jobscheduler約束與懶惰可以執行。

什麼是車庫模式?

在手機等聯網設備上,用戶依靠系統來確保設備穩定、最新和優化。為了達到這種狀態下,Android平台提供了一個空閒時間,在此期間,當用戶與設備不交互的應用程序可以執行的任務窗口。一個電話被認為是空閒時用戶不觸摸它在延長的持續時間(60分鐘或更長)和屏幕被關閉。不像手機,當不使用汽車,它被關閉,這意味著汽車已經沒有空閒的時間窗口。車庫模式可確保汽車閒置時間。

當用戶關閉汽車時,系統進入車庫模式。當汽車處於車庫模式時,系統會打開電源,顯示屏會關閉,並且會執行 JobScheduler 隊列中的空閒作業。為了實現車庫模式,請參閱設備實施指南以下。

設備實施指南

要激活車庫模式,關閉車輛時,車輛HAL(VHAL)必須發送AP_POWER_STATE_REQ與狀態SHUTDOWN_PREPARE與參數集SHUTDOWN_ONLYCAN_SLEEP

對於狀態SHUTDOWN_PREPARE是有效的,所述VHAL必須指定兩個參數(狀態和所述附加參數)為AP_POWER_STATE_REQ命令。這使得進入車庫模式,其檢測計劃中的作業設備的jobscheduler和防止系統程序要么暫停或直到作業完成關閉。

設備實現如何連接到 Android 框架?

對於 Garage Mode,框架請求 VHAL 延長關閉時間,直到超過所需的持續時間或所有作業都已執行,此時系統將關閉。在 CDD 中定義的特定情況下,設備實現可以更快地關閉系統。 (有關Android的兼容性要求的詳細信息,請參閱在Android兼容性定義文件(CDD) 。)如果VHAL必須車庫模式完成之前關閉系統,則VHAL可以發出SHUTDOWN_PREPARE與參數集SHUTDOWN_IMMEDIATELYSLEEP_IMMEDIATELY 。設備實現只能在特定情況下使用,通常時保持系統正常運行所需要的資源是不可用的。例如,當電池容量不足時。

車庫模式

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

應用程序和服務不直接與車庫模式交互。相反,應用時在調度作業的jobscheduler 。受限於那些工作懶散的車庫模式期間執行。

以下代碼顯示瞭如何安排作業在車庫模式下運行:

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