Garaj Modu, araçlarda boş zaman aralıkları sağlamak için sistemi çalışır durumda tutar. Böylece, boşluk ile kısıtlanmış JobScheduler
içindeki işler yürütülebilir.
Garaj Modu nedir?
Telefonlar gibi bağlı cihazlarda kullanıcılar, cihazların kararlı, güncel ve optimize olmasını sağlamak için sisteme güvenir. Android platformu, bu duruma ulaşmak için kullanıcı cihazla etkileşimde bulunmadığında uygulamaların görevler gerçekleştirebileceği bir boş zaman aralığı sağlar. Kullanıcı uzun süre (60 dakika veya daha fazla) telefonuna dokunmadığında ve ekran kapalı olduğunda telefon boşta olarak kabul edilir. Telefonun aksine, araba kullanılmadığında kapatılır. Bu nedenle, arabanın boşta kalma süresi yoktur. Garaj modu, araçta boşta kalma süresini sağlar.
Bir araba kullanıcı tarafından kapatıldığında sistem Garaj moduna girer. Araç Garaj Modu'ndayken 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 Cihaz uygulama yönergeleri başlıklı makaleyi inceleyin.
Cihaz uygulama yönergeleri
Garaj modunu etkinleştirmek için araç kapatıldığında Araç HAL'i (VHAL), AP_POWER_STATE_REQ
parametresini SHUTDOWN_PREPARE
durumuyla birlikte SHUTDOWN_ONLY
veya CAN_SLEEP
olarak ayarlayarak göndermelidir.
SHUTDOWN_PREPARE
durumunun etkili olması için VHAL'ın AP_POWER_STATE_REQ
komutu için iki parametreyi (durum ve ek parametre) belirtmesi gerekir. Bu sayede cihaz, JobScheduler
bölümünde planlanmış işleri algılayan ve işler tamamlanana kadar sistemin askıya alınmasını veya kapanmasını engelleyen Garaj moduna girer.
Cihaz uygulamaları Android çerçevesine nasıl bağlanır?
Garaj modu için çerçeve, VHAL'den gerekli süre aşılana veya tüm işler yürütülene kadar kapatma süresini uzatmasını ister. Bu durumda sistem kapanır. CDD'de tanımlanan belirli koşullarda, cihaz uygulamaları sistemi daha erken kapatabilir. Android uyumluluk koşulları hakkında ayrıntılı bilgi için Android Uyumluluk Tanımlama Belgesi'ne (CDD) bakın.
VHAL'ın Garaj Modu tamamlanmadan önce sistemi kapatması gerekiyorsa parametre SHUTDOWN_IMMEDIATELY
veya SLEEP_IMMEDIATELY
olarak ayarlanmış SHUTDOWN_PREPARE
gönderebilir. Cihaz uygulamalarında bu özellik yalnızca belirli durumlarda kullanılabilir. Bu durumlar genellikle sistemin çalışmasını sağlamak için gereken kaynakların kullanılamaması durumudur. Örneğin, pil kapasitesi yetersiz olduğunda.
Şekil 1. Garaj modu akışı
Garaj modu, uygulama geliştiricilere nasıl yardımcı olur?
Uygulamalar ve hizmetler, Garaj Modu ile doğrudan etkileşime girmez. Bunun yerine, uygulamalar JobScheduler
içinde işler planlar.
Boşta kalma nedeniyle kısıtlanan işler Garaj modu sırasında yürütülür.
Aşağıdaki kodda, bir işin Garaj modu sırasında çalışacak şekilde nasıl planlanacağı gösterilmektedir:
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ıklama yapmak için:- Garaj moduyla ilgili günlük kaydı 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ı belirten logcat çıkışını incelemek 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ı) belirten logcat çıkışını belirlemek için:
veya[GarageMode]: GarageMode was canceled
[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 çıkışı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