Penanganan sistem pengguna latar depan dan latar belakang

Di seluler Android, dukungan untuk banyak Pengguna memungkinkan Pengguna berjalan di latar belakang (saat Pengguna lain aktif) dan di latar depan (disebut juga Pengguna saat ini). Untuk menghemat sumber daya bila diperlukan, sistem mengatur penghentian pengguna. Satu Pengguna latar depan selalu diperlukan .

Dimulai dengan Android 10, Android Automotive memiliki konfigurasi default yang mengizinkan maksimal tiga Pengguna saja untuk berjalan dalam satu waktu ( config_multiuserMaxRunningUsers ). Oleh karena itu, selain Pengguna sistem tanpa kepala (Pengguna 0), hanya satu Pengguna latar depan dan satu Pengguna latar belakang yang dapat dikonfigurasi.

  • Dalam keadaan tertentu, Pengguna saat ini berjalan di latar depan dan pengguna sistem tanpa kepala (Pengguna 0) berjalan di latar belakang. Setelah Pengguna dipindahkan ke latar belakang, Pengguna dihentikan tetapi tidak dikunci. Ketika jumlah maksimum Pengguna terpenuhi, Pengguna latar belakang yang terakhir digunakan dihentikan dan dikunci ( config_multiuserDelayUserDataLocking ).
  • Berhenti dan tidak terkunci di latar belakang Pengguna dimulai ulang selama Mode Garasi .

Pengguna Tamu bersifat sementara dan hanya dapat berjalan di latar depan. Ketika seseorang keluar dari Tamu, Pengguna Tamu dihentikan dan tidak dapat berjalan di latar belakang.

Proses pengguna latar belakang

Ketika terjadi peralihan Pengguna dari latar depan ke latar belakang (dan sebaliknya), semua aktivitas dan layanan latar depan untuk Pengguna tersebut dihentikan. Hal ini menyebabkan penghentian semua layanan yang terikat dengan layanan tersebut. Namun, masih ada beberapa pembersihan yang dilakukan. Layanan persisten dari aplikasi sistem pihak pertama dan OEM terus berjalan selama Pengguna (sekarang di latar belakang) tidak dihentikan.

Layanan persisten lebih bermasalah karena layanan ini termasuk dalam bucket prioritas tinggi dalam sistem manajemen 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 yang persisten secara permanen mengukir sejumlah memori dan memori tersebut dikembalikan hanya ketika seseorang me-reboot mobil dan Pengguna latar belakang dihentikan.

Status pengguna

Seorang Pengguna berada dalam keadaan berhenti ( STATE_SHUTDOWN ) sampai Pengguna tersebut dimulai. Jika kredensial Pengguna (seperti PIN) disetel, Pengguna Android akan berjalan namun tetap terkunci ( STATE_RUNNING_LOCKED ) hingga seseorang membuka kunci layar untuk Pengguna tersebut. Ketika Pengguna tidak terkunci, penyimpanan terenkripsi kredensial mereka didekripsi dan direktori data untuk Pengguna tersebut menjadi tersedia. Untuk peralihan Pengguna pada umumnya, Pengguna di latar belakang tidak dihentikan dan tetap berjalan dan tidak terkunci ( STATE_RUNNING_UNLOCKED ), setelah dibuka kuncinya.

Mode Garasi, Penjadwal Pekerjaan, dan pembaruan aplikasi untuk pengguna

Teknik yang direkomendasikan bagi aplikasi Otomotif untuk memperbarui data adalah dengan menggunakan JobScheduler untuk menjadwalkan pekerjaan agar dijalankan saat perangkat dalam keadaan tidak aktif, melalui Mode Garasi (misalnya, mengunduh pembaruan aplikasi dari Google Play Store). Setelah aplikasi mendaftarkan pekerjaan dengan JobScheduler dan JobSchedulerService, pekerjaan tersebut dijalankan jika memungkinkan.

CarService mengirimkan sinyal ke JobSchedulerService untuk memicu pekerjaan yang diatur agar berjalan saat perangkat Otomotif dalam keadaan idle melalui Mode Garasi. Agar JobSchedulerService dapat menjalankan pekerjaan untuk Pengguna latar belakang, Pengguna tersebut harus berada dalam status STATE_RUNNING_UNLOCKED . Pekerjaan yang dimasukkan ke dalam JobSchedulerService akan tetap ada dan bertahan di seluruh siklus daya.

JobScheduler tidak dapat menjalankan pekerjaan untuk Pengguna tertentu jika Pengguna tidak pernah dibuka kuncinya setelah siklus daya. Namun, setelah dibuka kuncinya, dan jika Pengguna tetap berada di STATE_RUNNING_UNLOCKED , pekerjaan untuk Pengguna dapat dijalankan.