Penanganan sistem pengguna latar depan dan latar belakang

Di Android seluler, dukungan untuk beberapa pengguna memungkinkan pengguna berjalan di latar belakang (saat pengguna lain aktif) dan di latar depan (juga dikenal sebagai pengguna saat ini). Untuk menghemat resource jika diperlukan, sistem akan mengelola pemutusan pengguna. Satu pengguna latar depan selalu diperlukan.

Mulai Android 10, Android Automotive memiliki konfigurasi yang mengizinkan maksimum tiga pengguna hanya untuk berjalan pada satu waktu (config_multiuserMaxRunningUsers). Oleh karena itu, selain headless pengguna sistem (Pengguna 0), hanya satu pengguna latar depan dan satu pengguna latar belakang yang dapat dikonfigurasi.

  • Dalam situasi normal, pengguna saat ini berjalan di latar depan dan pengguna sistem headless (Pengguna 0) berjalan di latar belakang. Saat pengguna dipindahkan ke latar belakang, pengguna dihentikan tetapi tidak terkunci. Saat jumlah maksimum jumlah pengguna terpenuhi, pengguna latar belakang yang paling sering digunakan akan dihentikan dan dikunci (config_multiuserDelayUserDataLocking).
  • Pengguna latar belakang yang dihentikan dan tidak terkunci akan dimulai ulang selama Mode Garasi.

Pengguna tamu bersifat sementara dan hanya dapat berjalan di latar depan. Saat seseorang beralih dari tamu, pengguna tamu akan dihentikan dan tidak dapat berjalan di latar belakang.

Proses pengguna latar belakang

Saat pengguna dialihkan dari latar depan ke latar belakang (dan sebaliknya), semua aktivitas dan layanan latar depan untuk pengguna tersebut dihentikan. Tindakan ini akan menghentikan semua layanan yang terikat dari layanan tersebut. Namun, beberapa pembersihan tetap ada. Layanan persisten dari aplikasi sistem OEM dan pihak pertama terus berjalan selama pengguna (sekarang latar belakang) tidak dihentikan.

Layanan persisten lebih bermasalah, karena layanan dimuat dalam bucket prioritas tinggi di Out of Memory (OOM) Android manajemen sumber daya manusia. Bahkan jika aplikasi untuk pengguna latar depan memerlukan lebih banyak memori, aplikasi proses latar belakang tidak dihentikan. Hasilnya, dari latar depan, sudut pandang, layanan persisten akan secara permanen menghasilkan sejumlah memori dan bahwa memori hanya dikembalikan ketika seseorang me-{i>reboot<i} mobil dan latar belakangnya pengguna dihentikan.

Status pengguna

Pengguna berada dalam status dihentikan (STATE_SHUTDOWN) hingga pengguna dimulai. Jika kredensial pengguna (seperti PIN) ditetapkan, pengguna Android akan berjalan, tetapi tetap terkunci (STATE_RUNNING_LOCKED) hingga seseorang membuka kunci layar kunci untuk pengguna tersebut. Saat pengguna membuka kunci, penyimpanan yang dienkripsi dengan kredensial akan didekripsi dan direktori data untuk pengguna tersebut akan tersedia. Untuk pengalihan pengguna biasa, pengguna latar belakang tidak dihentikan dan tetap berjalan serta tidak terkunci (STATE_RUNNING_UNLOCKED), setelah tidak terkunci.

Mode Garasi, JobScheduler, dan update aplikasi untuk pengguna

Teknik yang direkomendasikan untuk aplikasi Otomotif guna mengupdate data adalah menggunakan JobScheduler untuk menjadwalkan tugas agar berjalan saat perangkat dalam status tidak ada aktivitas, melalui Mode Garasi (misalnya, mendownload update aplikasi dari Google Play). Setelah aplikasi mendaftarkan tugas ke JobScheduler dan JobSchedulerService, tugas-tugas tersebut akan dijalankan jika memungkinkan.

CarService mengirimkan sinyal ke JobSchedulerService untuk memicu tugas yang disetel untuk dijalankan saat perangkat Automotive dalam mode tidak ada aktivitas melalui Mode Garasi. Agar JobSchedulerService dapat menjalankan tugas untuk pengguna latar belakang, pengguna tersebut harus dalam status STATE_RUNNING_UNLOCKED. Tugas dalam antrean ke JobSchedulerService akan dipertahankan dan bertahan di seluruh siklus daya.

JobScheduler tidak dapat menjalankan tugas untuk pengguna tertentu jika pengguna tidak pernah terbuka setelah penyalaan ulang. Namun, ketika pengguna tidak terkunci, dan jika pengguna tetap berada STATE_RUNNING_UNLOCKED, tugas untuk pengguna dapat dijalankan.