Garaj Modu

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.

Garaj modu

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:
  1. 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
    
  2. 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
    
  3. 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.

  4. 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