फ़ोरग्राउंड और बैकग्राउंड में उपयोगकर्ता सिस्टम को मैनेज करना

Android मोबाइल में, एक से ज़्यादा उपयोगकर्ताओं के लिए सहायता की सुविधा, उपयोगकर्ताओं को बैकग्राउंड (जब कोई दूसरा उपयोगकर्ता चालू हो) और फ़ोरग्राउंड (इसे मौजूदा उपयोगकर्ता भी कहा जाता है) में चलाने की सुविधा देती है. ज़रूरत पड़ने पर संसाधनों को बचाने के लिए, सिस्टम उपयोगकर्ताओं के डिवाइसों को बंद कर देता है. फ़ोरग्राउंड में हमेशा एक उपयोगकर्ता होना ज़रूरी है.

Android 10 से, Android Automotive में डिफ़ॉल्ट रूप से, एक बार में ज़्यादा से ज़्यादा तीन उपयोगकर्ताओं को सिर्फ़ चलाने की अनुमति दी जाती है (config_multiuserMaxRunningUsers). इसलिए, हेडलेस सिस्टम उपयोगकर्ता (उपयोगकर्ता 0) के अलावा, सिर्फ़ एक फ़ोरग्राउंड उपयोगकर्ता और एक बैकग्राउंड उपयोगकर्ता को कॉन्फ़िगर किया जा सकता है.

  • आम तौर पर, मौजूदा उपयोगकर्ता फ़ोरग्राउंड में चलता है और हेडलेस सिस्टम उपयोगकर्ता (उपयोगकर्ता 0) बैकग्राउंड में चलता है. जब किसी उपयोगकर्ता को बैकग्राउंड में भेजा जाता है, तो उसे रोक दिया जाता है, लेकिन लॉक नहीं किया जाता. उपयोगकर्ताओं की तय सीमा पूरी होने पर, बैकग्राउंड में चल रहे उस उपयोगकर्ता को बंद कर दिया जाता है जिसे हाल ही में सबसे कम इस्तेमाल किया गया है. साथ ही, उसे लॉक कर दिया जाता है (config_multiuserDelayUserDataLocking).
  • गैरेज मोड के दौरान, बैकग्राउंड में चल रहे ऐसे उपयोगकर्ताओं को फिर से शुरू किया जाता है जिन्हें रोका गया है और जिनके डिवाइस अनलॉक हैं.

मेहमान उपयोगकर्ताओं के लिए, ऐप्लिकेशन सिर्फ़ फ़ोरग्राउंड में चल सकता है. जब कोई व्यक्ति मेहमान मोड से बाहर निकलता है, तो मेहमान उपयोगकर्ता को बंद कर दिया जाता है और वह बैकग्राउंड में नहीं चल सकता.

बैकग्राउंड में चल रही उपयोगकर्ता प्रोसेस

जब किसी उपयोगकर्ता को फ़ोरग्राउंड से बैकग्राउंड पर स्विच किया जाता है (और इसके उलट), तो उस उपयोगकर्ता के लिए सभी गतिविधियां और फ़ोरग्राउंड सेवाएं बंद हो जाती हैं. इससे, उन सेवाओं से जुड़ी सभी सेवाएं बंद हो जाती हैं. हालांकि, कुछ डेटा को हटाना बाकी है. पहले पक्ष (ग्राहक) और OEM सिस्टम ऐप्लिकेशन की सर्विस तब तक चलती रहती हैं, जब तक उपयोगकर्ता (अब बैकग्राउंड में) को बंद नहीं किया जाता.

हमेशा चालू रहने वाली सेवाओं से ज़्यादा समस्याएं होती हैं, क्योंकि ये सेवाएं Android के 'मेमोरी खत्म होने की समस्या' (ओओएम) मैनेजमेंट सिस्टम में, सबसे ज़्यादा प्राथमिकता वाली बकेट में शामिल होती हैं. भले ही, फ़ोरग्राउंड में काम करने वाले ऐप्लिकेशन को ज़्यादा मेमोरी की ज़रूरत हो, लेकिन बैकग्राउंड में चलने वाली प्रोसेस को बंद नहीं किया जाता. इस वजह से, फ़ोरग्राउंड उपयोगकर्ता के लिहाज़ से, हमेशा चालू रहने वाली सेवाएं हमेशा कुछ मेमोरी का इस्तेमाल करती हैं. यह मेमोरी तब ही वापस मिलती है, जब कोई व्यक्ति कार को रीबूट करता है और बैकग्राउंड में चलने वाली सभी सेवाओं को बंद कर देता है.

उपयोगकर्ता की स्थिति

उपयोगकर्ता तब तक 'बंद है' (STATE_SHUTDOWN) स्थिति में रहता है, जब तक उसे शुरू नहीं किया जाता. अगर उपयोगकर्ता का कोई क्रेडेंशियल (जैसे, पिन) सेट है, तो Android उपयोगकर्ता चलता है, लेकिन वह तब तक लॉक (STATE_RUNNING_LOCKED) रहता है, जब तक कोई व्यक्ति उस उपयोगकर्ता के लिए लॉकस्क्रीन को अनलॉक नहीं करता. जब उपयोगकर्ता के डिवाइस को अनलॉक किया जाता है, तो उसके क्रेडेंशियल को एन्क्रिप्ट (सुरक्षित) करने वाला स्टोरेज डिक्रिप्ट (सुरक्षित से सामान्य) हो जाता है और उस उपयोगकर्ता के लिए डेटा डायरेक्ट्री उपलब्ध हो जाती हैं. सामान्य तौर पर, उपयोगकर्ता के एक से दूसरे ऐप्लिकेशन पर स्विच करने पर, बैकग्राउंड में चल रहा उपयोगकर्ता ऐप्लिकेशन बंद नहीं होता. साथ ही, अनलॉक होने के बाद भी वह ऐप्लिकेशन चलता रहता है और अनलॉक रहता है (STATE_RUNNING_UNLOCKED).

उपयोगकर्ताओं के लिए Garage Mode, JobScheduler, और ऐप्लिकेशन के अपडेट

हमारा सुझाव है कि वाहन से जुड़े ऐप्लिकेशन, डेटा अपडेट करने के लिए JobScheduler का इस्तेमाल करें. इससे, गैरेज मोड की मदद से, डिवाइस के आइडल मोड में होने पर, टास्क शेड्यूल किए जा सकते हैं. उदाहरण के लिए, Google Play से ऐप्लिकेशन के अपडेट डाउनलोड करना. जब ऐप्लिकेशन JobScheduler और JobSchedulerService के साथ जॉब रजिस्टर करते हैं, तो जॉब तब चलाए जाते हैं, जब वे उपलब्ध हों.

CarService, JobSchedulerService को एक सिग्नल भेजता है, ताकि Garage Mode की मदद से, जब वाहन का डिवाइस इडल हो, तब चलने के लिए सेट की गई जॉब को ट्रिगर किया जा सके. बैकग्राउंड में काम करने वाले उपयोगकर्ता के लिए JobSchedulerService को जॉब चलाने के लिए, उस उपयोगकर्ता की स्थिति STATE_RUNNING_UNLOCKED होनी चाहिए. JobSchedulerService में पंक्ति में लगाए गए जॉब, पावर साइकल के दौरान बने रहते हैं.

अगर किसी उपयोगकर्ता को पावर साइकल के बाद कभी भी अनलॉक नहीं किया गया है, तो JobScheduler उस उपयोगकर्ता के लिए जॉब नहीं चला सकता. हालांकि, जब उपयोगकर्ता को अनलॉक किया जाता है और वह STATE_RUNNING_UNLOCKED में बना रहता है, तो उसके लिए जॉब चलाई जा सकती हैं.