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
default yang memungkinkan maksimum tiga pengguna saja berjalan sekaligus
(config_multiuserMaxRunningUsers
). Oleh karena itu, selain pengguna sistem
headless (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 akan dihentikan, tetapi tidak dikunci. Jika jumlah
pengguna maksimum terpenuhi, pengguna latar belakang yang paling jarang 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 akan dihentikan. Tindakan ini akan menghentikan semua layanan yang terikat dari layanan tersebut. Namun, masih ada beberapa pembersihan yang perlu dilakukan. Layanan persisten dari aplikasi sistem OEM dan pihak pertama terus berjalan selama pengguna (sekarang latar belakang) tidak dihentikan.
Layanan persisten lebih bermasalah, karena layanan ini terdapat dalam bucket prioritas tinggi di sistem pengelolaan Kehabisan Memori (OOM) Android. Meskipun aplikasi untuk pengguna latar depan memerlukan lebih banyak memori, proses latar belakang yang persisten tersebut tidak dihentikan. Akibatnya, dari sudut pandang pengguna latar depan, layanan persisten akan memotong sejumlah memori secara permanen dan memori tersebut hanya ditampilkan saat seseorang memulai ulang mobil dan pengguna latar belakang 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
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 dengan JobScheduler
dan
JobSchedulerService
,
tugas akan dijalankan jika memungkinkan.
CarService mengirimkan sinyal ke JobSchedulerService
untuk memicu tugas yang ditetapkan untuk dijalankan
saat perangkat Automotive tidak ada aktivitas
melalui Mode Garasi. Agar JobSchedulerService
dapat menjalankan tugas untuk pengguna latar belakang, pengguna
tersebut harus dalam status STATE_RUNNING_UNLOCKED
. Tugas yang diantrekan
ke JobSchedulerService
dipertahankan dan bertahan di seluruh siklus daya.
JobScheduler
tidak dapat menjalankan tugas untuk pengguna tertentu jika pengguna tidak pernah
dibuka kuncinya setelah siklus daya. Namun, saat pengguna tidak terkunci, dan jika pengguna tetap berada di
STATE_RUNNING_UNLOCKED
, tugas untuk pengguna dapat dijalankan.