Mode Garasi

Untuk memberikan periode waktu tidak ada aktivitas dalam kendaraan, Mode Garasi menjaga sistem terjaga sehingga pekerjaan di JobScheduler dibatasi dengan tidak ada aktivitas dapat dijalankan.

Apa itu Mode Garasi?

Pada perangkat terhubung seperti ponsel, pengguna mengandalkan sistem untuk memastikan perangkat stabil, terbaru, dan optimal. Untuk mencapai status tersebut, platform Android menyediakan tidak ada aktivitas waktu periode saat aplikasi dapat melakukan tugas saat pengguna tidak berinteraksi dengan perangkat. Ponsel dianggap tidak ada aktivitas jika pengguna tidak menyentuh untuk durasi yang diperpanjang (60 menit atau lebih) dan layar akan dimatikan. Tidak seperti ponsel, saat mobil tidak digunakan, ponsel akan dimatikan, yang berarti mobil tersebut tidak memiliki waktu tidak ada aktivitas jendela. Mode Garasi memastikan waktu tidak ada aktivitas di dalam mobil.

Saat mobil dimatikan oleh pengguna, sistem akan memasuki Mode Garasi. Meskipun mobil dalam Mode Garasi, sistem menyala, layar dimatikan, dan tugas yang tidak ada aktivitas dalam antrean JobScheduler akan dieksekusi. Untuk menerapkan Mode Garasi, lihat Panduan penerapan perangkat.

Panduan penerapan perangkat

Untuk mengaktifkan Mode Garasi, saat mematikan kendaraan, Vehicle HAL (VHAL) harus mengirim AP_POWER_STATE_REQ dengan status SHUTDOWN_PREPARE dengan parameter yang disetel ke SHUTDOWN_ONLY atau CAN_SLEEP.

Agar SHUTDOWN_PREPARE status efektif, VHAL harus menentukan dua hal parameter (status dan parameter tambahan) untuk perintah AP_POWER_STATE_REQ. Hal ini memungkinkan perangkat masuk ke Mode Garasi, yang mendeteksi tugas terjadwal di JobScheduler dan mencegah sistem melanjutkan untuk ditangguhkan atau dimatikan hingga tugas diselesaikan.

Bagaimana implementasi perangkat terhubung ke framework Android?

Untuk Mode Garasi, framework meminta VHAL untuk memperpanjang waktu penonaktifan hingga durasi yang disyaratkan terlampaui atau semua tugas telah dijalankan, saat sistem dimatikan. Dalam keadaan tertentu yang ditentukan di CDD, implementasi perangkat dapat mematikan sistem lebih cepat. Untuk detailnya tentang persyaratan kompatibilitas Android, lihat Compatibility Definition Document (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. Perangkat penerapan dapat menggunakannya hanya dalam keadaan tertentu, biasanya ketika sumber daya yang dibutuhkan untuk menjaga sistem tetap berjalan tidak tersedia. Sebagai misalnya, saat kapasitas baterai tidak mencukupi.

Mode garasi

Gambar 1. Alur Mode Garasi

Bagaimana cara developer aplikasi bekerja dengan Mode Garasi?

Aplikasi dan layanan tidak berinteraksi langsung dengan Mode Garasi. Sebagai gantinya, aplikasi menjadwalkan tugas di JobScheduler Tugas-tugas tersebut dibatasi oleh idleness dijalankan selama Mode Garasi.

Kode berikut menunjukkan cara menjadwalkan tugas untuk dijalankan selama Mode Garage:

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

Men-debug Mode Garasi

Untuk melakukan 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 output 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 output logcat agar Mode Garasi selesai (dibatalkan atau selesai):
    [GarageMode]: GarageMode was canceled
    
    atau
    [GarageMode]: GarageMode completed normally
    

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

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