為了讓車輛有一段閒置時間,車庫模式會讓系統保持運作,以便執行JobScheduler
中受閒置時間限制的工作。
什麼是車庫模式?
在手機等連網裝置上,使用者會依賴系統確保裝置穩定、更新及最佳化。為達到這個狀態,Android 平台會提供閒置時間視窗,讓應用程式在使用者未與裝置互動時執行工作。當使用者長時間 (60 分鐘以上) 未觸碰手機,且螢幕已關閉時,系統會將手機視為閒置狀態。與手機不同的是,汽車在未使用時會關機,因此沒有閒置時間視窗。車庫模式可確保車輛在車庫內的閒置時間。
當使用者關閉車輛時,系統會進入車庫模式。車輛處於車庫模式時,系統會開啟,螢幕會關閉,並執行 JobScheduler
佇列中的閒置工作。如要導入車庫模式,請參閱裝置導入指南。
裝置實作指南
如要啟用車庫模式,在關閉車輛時,車輛 HAL (VHAL) 必須傳送 AP_POWER_STATE_REQ
,狀態為 SHUTDOWN_PREPARE
,參數設為 SHUTDOWN_ONLY
或 CAN_SLEEP
。
為了讓狀態 SHUTDOWN_PREPARE
生效,VHAL 必須為 AP_POWER_STATE_REQ
指令指定兩個參數 (狀態和額外參數)。這樣裝置就能進入車庫模式,在 JobScheduler
中偵測排定的作業,並在作業完成前,防止系統繼續進入暫停或關機狀態。
裝置實作項目如何連線至 Android 架構?
針對車庫模式,架構會要求 VHAL 延長關機時間,直到超過所需的時間長度或執行所有工作為止,系統就會關機。在 CDD 中定義的特定情況下,裝置實作項目可以提早關閉系統。如要進一步瞭解 Android 相容性要求,請參閱 Android 相容性定義說明文件 (CDD)。
如果 VHAL 必須在車庫模式完成前關閉系統,則 VHAL 可以將參數設為 SHUTDOWN_IMMEDIATELY
或 SLEEP_IMMEDIATELY
,並發出 SHUTDOWN_PREPARE
。裝置實作項目「只」可在特定情況下使用此功能,通常是在無法取得維持系統運作所需的資源時。例如電池容量不足時。
圖 1. 車庫模式流程
應用程式開發人員如何使用車庫模式?
應用程式和服務不會直接與車庫模式互動。應用程式應改為在 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