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.
Ş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:- 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ı 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
- 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.
- 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