ऐप हाइबरनेशन

एक औसत Android उपयोगकर्ता अपने डिवाइस पर 50+ ऐप इंस्टॉल करता है (डिवाइस की रैम-टियर बढ़ने पर संख्या बढ़ जाती है)। हालांकि, इनमें से बड़ी संख्या में ऐप्स लंबे समय तक उपयोगकर्ता द्वारा उपयोग नहीं किए जाते हैं।

ऐप हाइबरनेशन उन ऐप्स को हाइबरनेट करता है जिनका उपयोग उपयोगकर्ता कुछ महीनों के लिए नहीं करता है, अनुमति ऑटो-निरसन के समान। यह ऐप को बलपूर्वक रोकता है और इसे ऐसी स्थिति में डालता है जहां हम प्रदर्शन के बजाय भंडारण के लिए अनुकूलित करते हैं। अनुमति ऑटो-निरस्त भी इस स्थिति के साथ बंडल की गई है और वे सेटिंग्स में समान छूट सेटिंग साझा करते हैं। फ़ोर्स स्टॉप्ड ऐप बैकग्राउंड में जॉब या अलर्ट नहीं चलाता है और पुश नोटिफिकेशन भेजने में सक्षम नहीं है। जब उपयोगकर्ता फिर से ऐप का उपयोग करता है, तो ऐप हाइबरनेशन से बाहर निकल जाता है और जॉब/अलर्ट/सूचनाएं हमेशा की तरह फिर से चलती हैं। ऐप के हाइबरनेशन में जाने से पहले शेड्यूल किए गए किसी भी जॉब/अलर्ट/नोटिफिकेशन को फिर से शेड्यूल करने की जरूरत है।

प्लेटफ़ॉर्म को संशोधित करने वाले ओईएम ऐप हाइबरनेशन कार्यान्वयन के साथ विरोध कर सकते हैं। उदाहरण के लिए

  • ऐप उपयोग परिभाषा को संशोधित करना या एओएसपी में नहीं होने वाले ऐप को जगाने के तरीकों को पेश करना ऐप हाइबरनेशन की सटीकता को बाधित कर सकता है
  • ऐप हाइबरनेशन के समान एक ओईएम का मालिकाना प्रतिबंध तंत्र एक समान उद्देश्य को पूरा कर सकता है। जबकि दोनों मौजूद हो सकते हैं, कुछ ओवरलैप हो सकते हैं।

सीडीडी मौजूदा 3.5.1 आवश्यकता के समान, ऐप के उपयोग पर आधारित परिवर्तनों के लिए आवश्यकताओं के एक नए सेट की रूपरेखा तैयार करता है। ऐप हाइबरनेशन इन आवश्यकताओं का पालन करता है।

फ्रेमवर्क कोड इसमें रहता है:

नीति तर्क में रहता है:

  • रेपो: प्लेटफॉर्म/पैकेज/मॉड्यूल/अनुमति
  • निर्देशिका: अनुमति नियंत्रक/src/com/android/अनुमति नियंत्रक/हाइबरनेशन

उच्च स्तरीय वास्तुकला

ऐप हाइबरनेशन सिस्टम सेवा भंडारण के लिए उपयोगकर्ता के कभी-कभी उपयोग किए जाने वाले ऐप्स को अनुकूलित करती है और उन ऐप्स को पृष्ठभूमि में चलने से रोकती है। इन परिणामों को प्राप्त करने के लिए, जब हम किसी ऐप को हाइबरनेट करते हैं, तो हम विशेष रूप से:

  • ऑटो-निरस्त अनुमतियाँ
  • फ़ोर्स-स्टॉप ऐप
  • ODEX और VDEX फ़ाइलें हटाएं
  • ऐप कैश हटाएं

हमारा लक्ष्य हाइबरनेशन को एक प्रतिवर्ती क्रिया के रूप में लागू करना है ताकि ऐप अभी भी लॉन्चर और ऐप डेटा के साथ अन्य सतहों के माध्यम से उपयोगकर्ता के लिए उपलब्ध हो। ऐप लॉन्च करने पर, हम इसे फ़ोर्स-स्टॉप स्थिति से वापस पुनर्स्थापित करेंगे और हमेशा की तरह ODEX और VDEX फ़ाइल निर्माण जारी रखेंगे।

दो मुख्य भागों के आसपास नियोजित डिजाइन केंद्र:

  • यह निर्धारित करना कि पैकेज को कब हाइबरनेट करना चाहिए
  • हाइबरनेटिंग पैकेज का अनुकूलन

PermissionController में एक नई सिस्टम सर्विस, AppHibernationService , और एक जॉब सर्विस, AppHibernationJobService, वह गोंद है जो समग्र निर्णय लेने और तर्क को नियंत्रित करता है।

यह निर्धारित करना कि किसी पैकेज को हाइबरनेट कब करना चाहिए, मुख्य रूप से UsageStatsService द्वारा संचालित होता है और PermissionController में AppHibernationJobService द्वारा प्रबंधित किया जाता है। यह नीति तर्क हमें मेनलाइन के माध्यम से गतिशील रूप से अपडेट करने की अनुमति देने के लिए PermissionController में रहता है। इसके अलावा, हम UsageStatsService में एक नए मीट्रिक के रूप में पैकेज के घटकों (उदाहरण के लिए, सेवाओं, सामग्री प्रदाताओं) के उपयोग को पकड़ने के लिए एक नया सिग्नल, घटक उपयोग जोड़ने की योजना बना रहे हैं।

पैकेज का अनुकूलन वह जगह है जहां सभी वास्तविक बचत/अनुकूलन होते हैं। AppHibernationService पैकेज को रोकने, कैशे डेटा को हटाने, एआरटी कलाकृतियों को हटाने आदि के लिए सिस्टम के विभिन्न हिस्सों के साथ संचार करता है। Android 11 और निचले उपकरणों पर ऑटो-रिवोक कार्यक्षमता को बनाए रखने के लिए AppHibernationJobService से सीधे अनुमति निरस्तीकरण शुरू किया गया है।

प्रयोगकर्ता का अनुभव

उपयोगकर्ता को जानकारी और नियंत्रण दोनों प्रदान किए जाते हैं कि किन ऐप्स को हाइबरनेट किया जा सकता है।

ऑटो-रिवोक के समान, उपयोगकर्ता को एक सूचना मिलती है कि कौन से ऐप्स हाइबरनेट किए गए हैं और ऐप को खोलने और इसे हाइबरनेशन से बाहर लाने या यदि आवश्यक हो तो अप्रयुक्त ऐप को हटाने के लिए सीधे अधिसूचना से सेटिंग में जाने का विकल्प है।

हम मौजूदा अनुमतियों के माध्यम से उपयोगकर्ता को हाइबरनेशन से छूट के लिए पूछने के डेवलपर के इरादे का समर्थन करना जारी रखते हैं, स्वत: निरस्त छूट के इरादे का समर्थन करते हैं।

पश्च संगतता

हाइबरनेशन-विशिष्ट सुविधाएं एंड्रॉइड 12 से उपलब्ध हैं। ये सुविधा पुराने संस्करणों पर काम नहीं कर सकती क्योंकि प्लेटफॉर्म घटक (जैसे नई सिस्टम सेवा) मौजूद नहीं हैं। ऑटो-रिवोक कार्य करना जारी रखता है जैसा कि पिछले OS संस्करणों के लिए वर्तमान में लागू किया गया है।

एंड्रॉइड 12 शुरू करना, बैकवर्ड संगतता सुनिश्चित करने के लिए, ऐप के पेज पर सेटिंग्स में ऐप्स और नोटिफिकेशन के तहत एक हाइबरनेशन टॉगल जोड़ा जाता है, जबकि मूल ऑटो-रिवोक टॉगल को अनुमति उप-मेनू के भीतर रखते हुए। यह टॉगल ऐप के लिए समग्र ऐप हाइबरनेशन सिस्टम छूट को नियंत्रित करता है।

अनुकूलित

चूंकि कुछ कार्यान्वयन मॉड्यूलर सिस्टम घटक का हिस्सा है, इसलिए भागीदारों को सुविधा को संशोधित करने से हतोत्साहित किया जाता है। जब तक वे सीडीडी आवश्यकताओं का पालन करते हैं, तब तक भागीदार समान सुविधाओं/कार्यक्षमताओं को लागू कर सकते हैं।

Android 11 या इसके बाद के संस्करण को लक्षित करने वाले सभी ऐप्स के लिए ऐप हाइबरनेशन डिफ़ॉल्ट रूप से चालू होना चाहिए। यह अनुमतियों के स्वतः निरस्त होने के समान है। जबकि सेटिंग स्वयं चालू हो सकती है, ऐप हाइबरनेशन कार्यान्वयन एंड्रॉइड 11 बनाम एंड्रॉइड 11 को लक्षित करने वाले ऐप्स के बीच भिन्न हो सकता है (अर्थात्, ऐप हाइबरनेशन केवल एंड्रॉइड 11 को लक्षित करने वाले ऐप्स के लिए काम करता है, जबकि यह अनिवार्य रूप से एंड्रॉइड 11 को लक्षित करने वाले ऐप्स के लिए ऑटो-रिवोक है।

इसके अतिरिक्त, OEM एक समान सुविधा को लागू कर सकते हैं। हालांकि, उन सुविधाओं को बैटरी अनुकूलन के लिए बहुत कम समय पर लक्षित किया जाता है जो ओईएम विशिष्ट हो सकते हैं। ओईएम द्वारा विकसित कोई भी समान ऐप प्रतिबंध सुविधाएँ ऐप हाइबरनेशन सिस्टम के साथ तब तक मौजूद रह सकती हैं जब तक वे सीडीडी में परिभाषित मौजूदा मानदंडों को पूरा करती हैं।

परिक्षण

ऐप हाइबरनेशन में यह सुनिश्चित करने के लिए सीटीएस और यूनिट परीक्षण हैं कि यह सही तरीके से काम कर रहा है।