Mode Garasi

Untuk memberikan periode waktu menganggur pada kendaraan, Mode Garasi menjaga sistem tetap aktif sehingga pekerjaan di JobScheduler yang dibatasi oleh waktu menganggur dapat dijalankan.

Apa itu Mode Garasi?

Pada perangkat yang terhubung seperti ponsel, pengguna mengandalkan sistem untuk memastikan perangkat stabil, terkini, dan dioptimalkan. Untuk mencapai kondisi tersebut, platform Android menyediakan jendela waktu idle yang memungkinkan aplikasi melakukan tugas saat pengguna tidak berinteraksi dengan perangkat. Ponsel dianggap menganggur jika pengguna tidak menyentuhnya dalam jangka waktu lama (60 menit atau lebih) dan layar dimatikan. Berbeda dengan telepon, saat mobil tidak digunakan, mobil dimatikan, yang berarti mobil tidak memiliki jendela waktu idle . Mode Garasi memastikan waktu idle di dalam mobil.

Ketika mobil dimatikan oleh pengguna, sistem memasuki Mode Garasi. Saat mobil berada dalam Mode Garasi, sistem akan dihidupkan, tampilan dimatikan, dan pekerjaan menganggur dalam antrean JobScheduler dijalankan. Untuk menerapkan Mode Garasi, lihat Pedoman penerapan perangkat .

Pedoman penerapan perangkat

Untuk mengaktifkan Mode Garasi, saat mematikan kendaraan, HAL Kendaraan (VHAL) harus mengirimkan AP_POWER_STATE_REQ dengan status SHUTDOWN_PREPARE dengan parameter diatur ke SHUTDOWN_ONLY atau CAN_SLEEP .

Agar status SHUTDOWN_PREPARE efektif, VHAL harus menentukan dua parameter (status dan parameter tambahan) untuk perintah AP_POWER_STATE_REQ . Hal ini memungkinkan perangkat memasuki Mode Garasi, yang mendeteksi pekerjaan terjadwal di JobScheduler dan mencegah sistem melanjutkan penangguhan atau penutupan hingga pekerjaan selesai.

Bagaimana implementasi perangkat terhubung ke framework Android?

Untuk Mode Garasi, kerangka kerja meminta VHAL untuk memperpanjang waktu pematian hingga durasi yang diperlukan terlampaui atau semua pekerjaan telah dijalankan, dan pada saat itulah sistem dimatikan. Dalam keadaan tertentu yang ditentukan dalam CDD, implementasi perangkat dapat mematikan sistem lebih cepat. Untuk detail tentang persyaratan kompatibilitas Android, lihat Dokumen Definisi Kompatibilitas Android (CDD) .

Jika VHAL harus mematikan sistem sebelum Mode Garasi selesai, VHAL dapat mengeluarkan SHUTDOWN_PREPARE dengan parameter yang disetel ke SHUTDOWN_IMMEDIATELY atau SLEEP_IMMEDIATELY . Implementasi perangkat hanya dapat menggunakan ini dalam keadaan tertentu, biasanya ketika sumber daya yang diperlukan untuk menjaga sistem tetap berjalan tidak tersedia. Misalnya saja ketika kapasitas baterai tidak mencukupi.

Modus garasi

Gambar 1. Alur Mode Garasi

Bagaimana cara pengembang aplikasi bekerja dengan Mode Garasi?

Aplikasi dan layanan tidak berinteraksi langsung dengan Mode Garasi. Sebaliknya, aplikasi menjadwalkan pekerjaan di JobScheduler . Pekerjaan yang dibatasi oleh kemalasan dijalankan selama Mode Garasi.

Kode berikut menunjukkan cara menjadwalkan pekerjaan untuk dijalankan selama Mode Garasi:

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());

Mode Garasi Debug

Untuk men-debug Mode Garasi:
  1. Untuk mengaktifkan kategori logging yang relevan dengan Mode Garasi:
    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. Untuk meninjau keluaran logcat guna menunjukkan bahwa Mode Garasi dimulai:
    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. Untuk menentukan keluaran logcat yang menunjukkan Mode Garasi telah selesai (dibatalkan atau diselesaikan):
    [GarageMode]: GarageMode was canceled
    
    atau
    [GarageMode]: GarageMode completed normally
    

    Mode Garasi bergantung pada status daya kendaraan seperti dijelaskan di atas.

  4. Tinjau keluaran logcat untuk menunjukkan status daya yang benar telah dimasukkan:
    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