Garaj Modu

Araçlarda boşta kalma süreleri sağlamak için Garaj Modu , JobScheduler boşta kalmayla kısıtlanan işlerin yürütülebilmesi için sistemi uyanık tutar.

Garaj Modu Nedir?

Kullanıcılar, telefon gibi bağlı cihazlarda cihazların kararlı, güncel ve optimize edilmiş olduğundan emin olmak için sisteme güvenirler. 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şta kalma süresi penceresi sağlar. Kullanıcı uzun bir süre (60 dakika veya daha fazla) dokunmadığında ve ekran kapatıldığında telefon boşta kabul edilir. Telefonun aksine, araba kullanılmadığında kapatılır, bu da arabanın boşta kalma süresi penceresi olmadığı anlamına gelir. Garaj Modu, arabanın boşta kalmasını sağlar.

Araç kullanıcı tarafından kapatıldığında sistem Garaj Moduna girer. Araç Garaj Modundayken sistem açılır, ekran kapatılır ve JobScheduler kuyruğundaki boşta kalan işler yürütülür. Garaj Modunu uygulamak için Cihaz uygulama yönergelerine bakın.

Cihaz uygulama yönergeleri

Garaj Modunu etkinleştirmek için, aracı kapatırken Araç HAL'sinin (VHAL), parametresi SHUTDOWN_ONLY veya CAN_SLEEP olarak ayarlanmış şekilde SHUTDOWN_PREPARE durumuyla AP_POWER_STATE_REQ göndermesi gerekir.

SHUTDOWN_PREPARE durumunun etkili olması için, VHAL'in AP_POWER_STATE_REQ komutuna yönelik iki parametreyi (durum ve ek parametre) belirtmesi gerekir. Bu, cihazın JobScheduler planlanmış işleri tespit eden ve işler tamamlanana kadar sistemin askıya alınmasını veya kapatılmasını önleyen Garaj Moduna girmesini sağlar.

Cihaz uygulamaları Android çerçevesine nasıl bağlanır?

Garaj Modu için çerçeve, VHAL'den 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 kapanır. CDD'de tanımlanan belirli koşullar altında cihaz uygulamaları sistemi daha erken kapatabilir. Android uyumluluk gereksinimlerine ilişkin ayrıntılar için Android Uyumluluk Tanımı Belgesine (CDD) bakın.

Garaj Modu tamamlanmadan önce VHAL'in sistemi kapatması gerekiyorsa VHAL, SHUTDOWN_IMMEDIATELY veya SLEEP_IMMEDIATELY olarak ayarlanmış parametreyle SHUTDOWN_PREPARE komutunu verebilir. Cihaz uygulamaları bunu yalnızca belirli koşullar altında, genellikle sistemi çalışır durumda tutmak için gereken kaynakların mevcut olmadığı durumlarda kullanabilir. Örneğin pil kapasitesi yetersiz olduğunda.

Garaj modu

Şekil 1. Garaj Modu akışı

Uygulama geliştiricileri Garaj Moduyla nasıl çalışır?

Uygulamalar ve hizmetler Garaj Moduyla doğrudan etkileşime girmez. Bunun yerine uygulamalar işleri JobScheduler planlar. Boşta kalma nedeniyle kısıtlanan işler Garaj Modu sırasında gerçekleştirilir.

Aşağıdaki kod, bir işin Garaj Modu sırasında çalışacak şekilde nasıl planlanacağı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 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
    
  2. Garaj Modunun başladığını belirtmek üzere logcat çıktısı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
    
  3. Garaj Modunun bittiğini (iptal edildiğini veya tamamlandığını) belirten logcat çıktısının belirlenmesi için:
    [GarageMode]: GarageMode was canceled
    
    veya
    [GarageMode]: GarageMode completed normally
    

    Garaj Modu yukarıda anlatıldığı gibi aracın güç durumuna bağlıdır.

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