في أجهزة Android الجوّالة، يتيح إتاحة استخدام حسابات متعددة للمستخدمين تشغيل التطبيقات في الخلفية (عندما يكون مستخدم آخر نشطًا) وفي المقدّمة (المعروفة أيضًا باسم المستخدم الحالي). يدير النظام عملية إيقاف المستخدمين للمحافظة على الموارد عندما يكون ذلك مناسبًا. يجب دائمًا استخدام مستخدم واحد في المقدّمة.
بدءًا من نظام التشغيل Android 10، يتم ضبط الإعداد التلقائي على نظام التشغيل Android Automotive.
ضبط عملية السماح لثلاثة مستخدمين كحد أقصى فقط بالتشغيل في آنٍ واحد
(config_multiuserMaxRunningUsers
). لذلك، بالإضافة إلى التصاميم بلا واجهة مستخدم رسومية
مستخدم النظام (المستخدم 0)، يمكن فقط ضبط مستخدم واحد في المقدّمة ومستخدم واحد في الخلفية.
- في الحالات العادية، يتم تشغيل المستخدم الحالي في المقدّمة
وتشغيل مستخدم النظام بدون شاشة (المستخدم 0) في الخلفية. عندما يكون المستخدم
يتم نقله إلى الخلفية، يتم إيقاف المستخدم ولكن لا يتم قفله. عند بلوغ الحد الأقصى
لعدد المستخدمين، يتم إيقاف مستخدم الخلفية الأقل استخدامًا في الآونة الأخيرة
وتثبيته (
config_multiuserDelayUserDataLocking
). - تتم إعادة تشغيل المستخدمين المتوقفين والمُستخدَمين في الخلفية الذين تم فتح قفلهم أثناء وضع المرآب.
يكون المستخدمون الضيوف مؤقتًا ويمكن تشغيلهم في المقدّمة فقط. عندما يخرج مستخدم من وضع الضيف، يتم إيقاف حساب الضيف ولا يمكن تشغيله في الخلفية.
عمليات المستخدم في الخلفية
عند تبديل المستخدِم من المقدّمة إلى الخلفية (والعكس صحيح)، فإنّ جميع الأنشطة يتم إنهاء الخدمات التي تعمل في المقدّمة لهذا المستخدم يؤدي ذلك إلى إيقاف جميع الخدمات المرتبطة بهذه الخدمات. ومع ذلك، لا يزال هناك بعض الخطوات التي يجب إكمالها. تستمر خدمات التشغيل المستمر من تطبيقات الطرف الأول وتطبيقات نظام المصنّع الأصلي للجهاز في العمل طالما لم يتم إيقاف المستخدم (الذي يعمل الآن في الخلفية).
إنّ الخدمات الثابتة هي أكثر إشكالية، لأنّه يتم تضمين هذه الخدمات في حزمة ذات أولوية عالية في نظام إدارة "الذاكرة غير المتوفرة" (OOM) في Android. حتى إذا كانت التطبيقات المخصّصة للمستخدم في المقدّمة تتطلّب المزيد من الذاكرة، لا يتم إنهاء هذه العمليات المستمرة في الخلفية. وبناءً على ذلك، يفكر مستخدم بوجهة نظر، تستحوذ الخدمات المستمرة على جزء من الذاكرة بشكل دائم ولا تُرجع هذه الذاكرة إلا عندما يُعيد الشخص تشغيل السيارة وأي خلفية إيقاف المستخدمين.
حالة المستخدم
يظلّ المستخدِم في حالة توقّف (STATE_SHUTDOWN
) إلى أن يتوقّف المستخدم
البدء. في حال ضبط بيانات اعتماد مستخدم (مثل رقم تعريف شخصي)، يتم تشغيل حساب مستخدم Android ولكنه
يظل مقفلاً (STATE_RUNNING_LOCKED
) إلى أن يفتح شخص قفل شاشة القفل
لهذا المستخدم. عند فتح قفل الجهاز، يتم فك تشفير مساحة التخزين المشفَّرة لبيانات الاعتماد
وتصبح أدلة البيانات لهذا المستخدم متاحة. في عمليات تبديل المستخدمين المعتادة،
لا يتم إيقاف المستخدم في الخلفية ويظل قيد التشغيل ومفتوحًا
(STATE_RUNNING_UNLOCKED
)، بعد فتح قفله.
وضع Garage Mode وJobScheduler وتعديلات التطبيقات للمستخدمين
والأسلوب المُقترَح لتطبيقات نظام التشغيل Automotive لتعديل البيانات هو استخدام JobScheduler
.
لجدولة المهام لتنفيذها عندما يكون الجهاز في حالة عدم النشاط، من خلال وضع المرآب (على سبيل المثال، تنزيل
تحديثات التطبيق من Google Play). بعد أن تسجِّل التطبيقات الوظائف لدى JobScheduler
JobSchedulerService
,
يتم تشغيل الوظائف عندما يكون ذلك ممكنًا.
تُرسِل CarService إشارة إلى JobSchedulerService
لبدء المهام التي تم ضبطها لتعمل
عندما يكون جهاز Automotive في وضع السكون
من خلال وضع Garage Mode. لكي يتمكّن JobSchedulerService
من تنفيذ مهام لمستخدم في الخلفية، يجب أن يكون
هذا المستخدم في الحالة STATE_RUNNING_UNLOCKED
. المهام في قائمة الانتظار
إلى JobSchedulerService
يبقى كما هو عبر دورات الطاقة.
لا يمكن لـ JobScheduler
تنفيذ مهام لمستخدم معيّن إذا لم يتم
فتح قفل الجهاز للمستخدم مطلقًا بعد دورة طاقة. ومع ذلك، عند فتح قفل المستخدم، وإذا ظل المستخدم في
STATE_RUNNING_UNLOCKED
، يمكن تنفيذ المهام للمستخدم.