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 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.