Mode Garasi

Untuk menyediakan periode waktu idle di kendaraan, Garage Mode membuat sistem tetap terjaga sehingga pekerjaan di JobScheduler yang dibatasi dengan idle dapat dijalankan.

Apa itu Mode Garasi?

Pada perangkat yang terhubung seperti ponsel, pengguna mengandalkan sistem untuk memastikan perangkat stabil, mutakhir, dan dioptimalkan. Untuk mencapai status itu, platform Android menyediakan jendela waktu idle di mana aplikasi dapat melakukan tugas saat pengguna tidak berinteraksi dengan perangkat. Ponsel dianggap menganggur bila pengguna tidak menyentuhnya dalam waktu lama (60 menit atau lebih) dan layar dimatikan. Tidak seperti telepon, ketika mobil tidak digunakan, dimatikan, yang berarti mobil tidak memiliki jendela waktu idle . Mode Garasi memastikan waktu idle di dalam mobil.

Saat mobil dimatikan oleh pengguna, sistem masuk ke Mode Garasi. Saat mobil dalam Mode Garasi, sistem dihidupkan, tampilan dimatikan, dan pekerjaan menganggur dalam antrian JobScheduler dijalankan. Untuk menerapkan Mode Garasi, lihat Panduan penerapan perangkat di bawah.

Pedoman penerapan perangkat

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

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

Bagaimana implementasi perangkat terhubung ke kerangka kerja Android?

Untuk Mode Garasi, kerangka kerja meminta VHAL untuk memperpanjang waktu pematian hingga durasi yang diperlukan terlampaui atau semua pekerjaan telah dijalankan, pada saat itu sistem akan dimatikan. Dalam keadaan khusus 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 dapat menggunakan ini hanya dalam keadaan tertentu , biasanya ketika sumber daya yang dibutuhkan untuk menjaga sistem tetap berjalan tidak tersedia. Misalnya, ketika kapasitas baterai tidak mencukupi.

Modus garasi

Bagaimana cara kerja pengembang aplikasi dengan Mode Garasi?

Aplikasi dan layanan tidak berinteraksi langsung dengan Mode Garasi. Sebagai gantinya, 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());

Men-debug Mode Garasi

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 untuk 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 bahwa Mode Garasi telah selesai (dibatalkan atau diselesaikan):
    [GarageMode]: GarageMode was canceled
    
    atau,
    [GarageMode]: GarageMode completed normally
    

    Mode Garasi tergantung pada kondisi daya kendaraan seperti yang dijelaskan di atas.

  4. Tinjau output logcat untuk menunjukkan status daya yang benar 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