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

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

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

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

मेहमान उपयोगकर्ताओं की प्रोफ़ाइलें कुछ समय के लिए ही बनी रहती हैं और वे सिर्फ़ फ़ोरग्राउंड में चल सकती हैं. जब कोई व्यक्ति मेहमान मोड से ऑप्ट आउट करने पर, मेहमान उपयोगकर्ता रुक जाता है और बैकग्राउंड में नहीं चल सकता.

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

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

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

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

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

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

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

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

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