Araçlarda boşta kalma süreleri sağlamak için Garaj Modu sistemi uyanık tutar, böylece JobScheduler'da boşta kalmayla sınırlı işler yürütülebilir.
Garaj Modu nedir?
Telefonlar gibi bağlı cihazlarda kullanıcılar, cihazların kararlı, güncel ve optimize olduğundan emin olmak için sisteme güvenir. Bu duruma ulaşmak için, Android platformu, kullanıcı cihazla etkileşime girmediğinde uygulamaların görevleri gerçekleştirebileceği bir boş zaman penceresi sağlar. Kullanıcı telefona uzun süre (60 dakika veya daha fazla) dokunmadığında ve ekranı kapatıldığında telefon boşta olarak kabul edilir. Bir telefonun aksine, bir araba kullanılmadığında kapatılır, bu da arabanın boşta kalma süresi olmadığı anlamına gelir. Garaj Modu, bir arabada boşta kalma süresi sağlar.
Bir araba kullanıcı tarafından kapatıldığında, sistem Garaj Moduna girer. Bir araba Garaj Modundayken sistem açılır, ekran kapatılır ve JobScheduler kuyruğundaki boş işler yürütülür. Garaj Modunu uygulamak için aşağıdaki Cihaz uygulama yönergelerine bakın.
Cihaz uygulama yönergeleri
Garaj Modunu etkinleştirmek için, aracı kapatırken, Araç HAL (VHAL), parametresi SHUTDOWN_ONLY
veya CAN_SLEEP
olarak ayarlanmış SHUTDOWN_PREPARE
durumuyla AP_POWER_STATE_REQ
göndermelidir.
SHUTDOWN_PREPARE
durumunun etkili olması için VHAL, AP_POWER_STATE_REQ
komutu için iki parametreyi (durum ve ek parametre) belirtmelidir. Bu, cihazın JobScheduler'da programlanmış işleri algılayan ve işler tamamlanana kadar sistemin askıya alınmasını veya kapanmasını engelleyen Garaj Moduna girmesini sağlar.
Cihaz uygulamaları Android çerçevesine nasıl bağlanır?
Garaj Modu için çerçeve, VHAL'ın kapatma süresini gerekli süre aşılana veya tüm işler yürütülene kadar uzatmasını ister; bu sırada sistem kapatılır. CDD'de tanımlanan belirli koşullar altında, cihaz uygulamaları sistemi daha erken kapatabilir. (Android uyumluluğu gereksinimleriyle ilgili ayrıntılar için, Android Uyumluluk Tanımlama Belgesine (CDD) bakın.) VHAL'ın Garaj Modu tamamlanmadan önce sistemi kapatması gerekiyorsa, VHAL, SHUTDOWN_PREPARE
parametresini SHUTDOWN_IMMEDIATELY
veya SLEEP_IMMEDIATELY
olarak ayarlayarak SHUTDOWN_PREPARE verebilir. Cihaz uygulamaları bunu yalnızca belirli koşullar altında, genellikle sistemi çalışır durumda tutmak için gereken kaynaklar kullanılamadığında kullanabilir. Örneğin, pil kapasitesi yetersiz olduğunda.
Uygulama geliştiricileri Garaj Modu ile nasıl çalışır?
Uygulamalar ve hizmetler, Garaj Modu ile doğrudan etkileşime girmez. Bunun yerine, uygulamalar JobScheduler içindeki işleri planlar. Boşta kalmayla sınırlandırılan işler Garaj Modu sırasında yürütülür.
Aşağıdaki kod, Garaj Modu sırasında çalışacak bir işin nasıl programlanacağını gösterir:
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());
Garaj Modunda Hata Ayıklama
Garaj Modunda hata ayıklamak için:- Garaj Moduyla ilgili kayıt kategorilerini etkinleştirmek için:
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
- Garaj Modunun başladığını belirtmek için logcat çıktısını gözden geçirmek için:
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
- Garaj Modunun bittiğini (iptal edildiğini veya tamamlandığını) belirtmek için logcat çıktısını belirlemek için:
[GarageMode]: GarageMode was canceled
veya,[GarageMode]: GarageMode completed normally
Garaj Modu, yukarıda açıklandığı gibi aracın güç durumuna bağlıdır.
- Doğru güç durumlarının girildiğini belirtmek için logcat çıktısını inceleyin:
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