Um Leerlaufzeiten in Fahrzeugen bereitzustellen, hält der Garagenmodus das System wach, sodass durch Leerlauf eingeschränkte Jobs im JobScheduler ausgeführt werden können.
Was ist der Garagenmodus?
Auf verbundenen Geräten wie Telefonen verlassen sich Benutzer darauf, dass das System sicherstellt, dass die Geräte stabil, aktuell und optimiert sind. Um diesen Zustand zu erreichen, stellt die Android-Plattform ein Leerlaufzeitfenster bereit, in dem Anwendungen Aufgaben ausführen können, wenn der Benutzer nicht mit dem Gerät interagiert. Ein Telefon gilt als im Leerlauf , wenn der Benutzer es über einen längeren Zeitraum (60 Minuten oder länger) nicht berührt und der Bildschirm ausgeschaltet ist. Im Gegensatz zu einem Telefon ist ein Auto ausgeschaltet, wenn es nicht benutzt wird, sodass das Auto kein Zeitfenster für Leerlaufzeiten hat. Der Garagenmodus sorgt für Leerlaufzeiten im Auto.
Wenn ein Auto vom Benutzer ausgeschaltet wird, wechselt das System in den Garagenmodus. Während sich ein Auto im Garagenmodus befindet, ist das System eingeschaltet, das Display ausgeschaltet und inaktive Jobs in der JobScheduler-Warteschlange werden ausgeführt. Informationen zum Implementieren des Garagenmodus finden Sie in den Richtlinien zur Geräteimplementierung unten.
Richtlinien zur Geräteimplementierung
Um den Garagenmodus zu aktivieren, muss der Fahrzeug-HAL (VHAL) beim Ausschalten des Fahrzeugs AP_POWER_STATE_REQ
mit dem Status SHUTDOWN_PREPARE
senden, wobei der Parameter auf SHUTDOWN_ONLY
oder CAN_SLEEP
eingestellt ist.
Damit der Status SHUTDOWN_PREPARE
wirksam wird, muss der VHAL die beiden Parameter (Status und den zusätzlichen Parameter) für den Befehl AP_POWER_STATE_REQ
angeben. Dadurch kann das Gerät in den Garagenmodus wechseln, der geplante Jobs im JobScheduler erkennt und verhindert, dass das System entweder anhält oder herunterfährt, bis die Jobs abgeschlossen sind.
Wie stellen Geräteimplementierungen eine Verbindung zum Android-Framework her?
Für den Garagenmodus fordert das Framework die VHAL auf, die Abschaltzeit zu verlängern, bis entweder die erforderliche Dauer überschritten ist oder alle Jobs ausgeführt wurden. Zu diesem Zeitpunkt wird das System heruntergefahren. Unter bestimmten, im CDD definierten Umständen können Geräteimplementierungen das System früher herunterfahren. (Einzelheiten zu Android-Kompatibilitätsanforderungen finden Sie im Android Compatibility Definition Document (CDD) .) Wenn der VHAL das System herunterfahren muss, bevor der Garagenmodus abgeschlossen ist, kann der VHAL SHUTDOWN_PREPARE
ausgeben, wobei der Parameter auf SHUTDOWN_IMMEDIATELY
oder SLEEP_IMMEDIATELY
gesetzt ist. Geräteimplementierungen können dies nur unter bestimmten Umständen verwenden, typischerweise wenn die Ressourcen, die zum Betrieb des Systems erforderlich sind, nicht verfügbar sind. Zum Beispiel, wenn die Batteriekapazität nicht ausreicht.
Wie arbeiten Anwendungsentwickler mit dem Garagenmodus?
Anwendungen und Dienste interagieren nicht direkt mit dem Garagenmodus. Stattdessen planen Apps Jobs im JobScheduler . Die durch Leerlauf eingeschränkten Jobs werden im Garagenmodus ausgeführt.
Der folgende Code zeigt, wie Sie die Ausführung eines Jobs im Garagenmodus planen:
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());
Debuggen des Garagenmodus
So debuggen Sie den Garagenmodus:- So aktivieren Sie Protokollierungskategorien, die für den Garagenmodus relevant sind:
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
- So überprüfen Sie die Logcat-Ausgabe, um anzuzeigen, dass der Garagenmodus startet:
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
- So ermitteln Sie, dass die Logcat-Ausgabe anzeigt, dass der Garagenmodus beendet (abgebrochen oder abgeschlossen) ist:
[GarageMode]: GarageMode was canceled
oder[GarageMode]: GarageMode completed normally
Der Garagenmodus hängt wie oben beschrieben vom Energiezustand des Fahrzeugs ab.
- Überprüfen Sie die Logcat-Ausgabe, um sicherzustellen, dass die richtigen Energiezustände eingegeben wurden:
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