為了在車輛中提供空閒時間段,車庫模式使系統保持清醒,以便可以執行受空閒限制的JobScheduler中的作業。
什麼是車庫模式?
在手機等連接設備上,用戶依靠系統來確保設備穩定、最新和優化。為了實現這種狀態,Android 平台提供了一個空閒時間窗口,在此期間應用程序可以在用戶不與設備交互時執行任務。當用戶長時間(60 分鐘或更長時間)不觸摸手機並且屏幕關閉時,手機被認為處於空閒狀態。與電話不同的是,當汽車不使用時,它會關閉,這意味著汽車沒有空閒時間窗口。車庫模式確保車內的空閒時間。
當用戶關閉汽車時,系統進入車庫模式。當汽車處於車庫模式時,系統會打開電源,顯示屏會關閉,並且會執行 JobScheduler 隊列中的空閒作業。要實施車庫模式,請參閱下面的設備實施指南。
設備實施指南
要激活車庫模式,在關閉車輛時,車輛 HAL ( AP_POWER_STATE_REQ
) 必鬚髮送狀態為SHUTDOWN_PREPARE
且參數設置為SHUTDOWN_ONLY
或 CAN_SLEEP 的CAN_SLEEP
。
為了使狀態SHUTDOWN_PREPARE
有效,VHAL 必須為AP_POWER_STATE_REQ
命令指定兩個參數(狀態和附加參數)。這使設備能夠進入車庫模式,該模式檢測JobScheduler中的計劃作業並防止系統繼續掛起或關閉,直到作業完成。
設備實現如何連接到 Android 框架?
對於車庫模式,框架請求 VHAL 延長關閉時間,直到超過所需的持續時間或所有作業都已執行,此時系統將關閉。在 CDD 中定義的特定情況下,設備實現可以更快地關閉系統。 (有關 Android 兼容性要求的詳細信息,請參閱 Android兼容性定義文檔 (CDD) 。)如果 VHAL 必須在車庫模式完成之前關閉系統,則 VHAL 可以發出SHUTDOWN_PREPARE
參數設置為SHUTDOWN_IMMEDIATELY
或SLEEP_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());
調試車庫模式
調試車庫模式:- 要啟用與車庫模式相關的日誌記錄類別:
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
- 查看 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
- 要確定指示車庫模式已完成(已取消或已完成)的 logcat 輸出:
[GarageMode]: GarageMode was canceled
或[GarageMode]: GarageMode completed normally
車庫模式取決於車輛的電源狀態,如上所述。
- 查看 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