Garaj Modu

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.

Garaj modu

Ş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:
  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ı 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
  3. Garaj modunun bittiğini (iptal edildiğini veya tamamlandığını) belirten logcat çıkışı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 çı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