औसतन, Android का कोई उपयोगकर्ता अपने डिवाइसों पर 50 से ज़्यादा ऐप्लिकेशन इंस्टॉल करता है. डिवाइसों में रैम की क्षमता बढ़ने पर, यह संख्या बढ़ जाती है. हालांकि, इनमें से कई ऐप्लिकेशन को उपयोगकर्ता लंबे समय तक इस्तेमाल नहीं करता.
ऐप्लिकेशन हाइबरनेशन की सुविधा, उन ऐप्लिकेशन को हाइबरनेट कर देती है जिन्हें उपयोगकर्ता कुछ महीनों तक इस्तेमाल नहीं करता. यह सुविधा, अनुमतियों के अपने-आप वापस होने की सुविधा की तरह काम करती है. इससे ऐप्लिकेशन ज़बरदस्ती बंद हो जाता है और वह ऐसी स्थिति में चला जाता है जहां हम परफ़ॉर्मेंस के बजाय स्टोरेज को ऑप्टिमाइज़ करते हैं. अनुमतियों के अपने-आप वापस होने की सुविधा भी इस स्थिति के साथ बंडल की जाती है. साथ ही, इन दोनों के लिए सेटिंग में, एक ही छूट सेटिंग होती है. ज़बरदस्ती बंद किया गया ऐप्लिकेशन, बैकग्राउंड में कोई काम या अलर्ट नहीं दिखाता. साथ ही, पुश सूचनाएं भी नहीं भेज पाता. जब उपयोगकर्ता ऐप्लिकेशन को फिर से इस्तेमाल करता है, तो वह हाइबरनेशन से बाहर आ जाता है. इसके बाद, काम/अलर्ट/सूचनाएं पहले की तरह काम करने लगती हैं. ऐप्लिकेशन के हाइबरनेशन में जाने से पहले शेड्यूल किए गए सभी काम/अलर्ट/सूचनाओं को फिर से शेड्यूल करना होगा.
प्ैटफ़ॉर्म में बदलाव करने वाले OEM, ऐप्लिकेशन हाइबरनेशन की सुविधा के साथ काम नहीं कर सकते. उदाहरण के लिए
- ऐप्लिकेशन के इस्तेमाल की परिभाषा में बदलाव करने या AOSP में मौजूद नहीं, ऐसे तरीकों से ऐप्लिकेशन को चालू करने पर, ऐप्लिकेशन हाइबरनेशन की सुविधा में गड़बड़ी आ सकती है
- किसी OEM का मालिकाना हक वाला, पाबंदी लगाने का ऐसा तरीका जो ऐप्लिकेशन हाइबरनेशन की सुविधा की तरह काम करता है, वही काम कर सकता है. हालांकि, दोनों सुविधाएं एक साथ काम कर सकती हैं, लेकिन इनमें कुछ ओवरलैप हो सकता है.
CDD में, ऐप्लिकेशन के इस्तेमाल के आधार पर किए जाने वाले बदलावों के लिए, ज़रूरी शर्तों का एक नया सेट दिया गया है. यह मौजूदा ज़रूरी शर्त 3.5.1 की तरह है. ऐप्लिकेशन हाइबरनेशन की सुविधा, इन ज़रूरी शर्तों के मुताबिक काम करती है.
फ़्रेमवर्क कोड यहां मौजूद है:
- रिपो: platform/frameworks/base
- निर्देशिका: services/core/java/com/android/server/apphibernation
नीति का लॉजिक यहां मौजूद है:
- रिपो: platform/packages/modules/Permission
- निर्देशिका: PermissionController/src/com/android/permissioncontroller/hibernation
आर्किटेक्चर की खास जानकारी
ऐप्लिकेशन हाइबरनेशन सिस्टम सेवा, उपयोगकर्ता के उन ऐप्लिकेशन को स्टोरेज के लिए ऑप्टिमाइज़ करती है जिन्हें वह कम इस्तेमाल करता है. साथ ही, यह उन ऐप्लिकेशन को बैकग्राउंड में चलने से रोकती है. इन नतीजों को पाने के लिए, जब हम किसी ऐप्लिकेशन को हाइबरनेट करते हैं, तो हम खास तौर पर ये काम करते हैं:
- अनुमतियां अपने-आप वापस होने की सुविधा चालू करते हैं
- ऐप्लिकेशन को ज़बरदस्ती बंद करते हैं
- ODEX और VDEX फ़ाइलें मिटाते हैं
- ऐप्लिकेशन की कैश मेमोरी मिटाते हैं
हमारा लक्ष्य, हाइबरनेशन की सुविधा को वापस लाने लायक बनाना है, ताकि उपयोगकर्ता को ऐप्लिकेशन लॉन्चर और अन्य प्लैटफ़ॉर्म पर, ऐप्लिकेशन का डेटा बरकरार रखते हुए ऐप्लिकेशन उपलब्ध रहे. ऐप्लिकेशन लॉन्च करने पर, हम उसे ज़बरदस्ती बंद करने की स्थिति से वापस लाएंगे. साथ ही, ODEX और VDEX फ़ाइल बनाने की प्रोसेस पहले की तरह जारी रखेंगे.
प्लान किए गए डिज़ाइन में, दो मुख्य हिस्सों पर फ़ोकस किया गया है:
- यह तय करना कि किसी पैकेज को कब हाइबरनेट किया जाना चाहिए
- हाइबरनेट किए जा रहे पैकेज को ऑप्टिमाइज़ करना
PermissionController में मौजूद एक नई सिस्टम सेवा, AppHibernationService और एक जॉब सेवा, AppHibernationJobService, पूरे फ़ैसले लेने की प्रोसेस और लॉजिक को कंट्रोल करती है.
यह तय करना कि किसी पैकेज को कब हाइबरनेट किया जाना चाहिए, मुख्य तौर पर UsageStatsService की मदद से तय किया जाता है. इसे PermissionController में मौजूद AppHibernationJobService मैनेज करता है. यह नीति लॉजिक, PermissionController में मौजूद है, ताकि हम इसे Mainline के ज़रिए डाइनैमिक तरीके से अपडेट कर सकें. इसके अलावा, हम UsageStatsService में एक नया सिग्नल, कॉम्पोनेंट के इस्तेमाल की जानकारी जोड़ने की योजना बना रहे हैं. इससे पैकेज के कॉम्पोनेंट (उदाहरण के लिए, सेवाएं, कॉन्टेंट प्रोवाइडर) के इस्तेमाल की जानकारी को UsageStatsService में एक नई मेट्रिक के तौर पर कैप्चर किया जा सकेगा.
किसी पैकेज को ऑप्टिमाइज़ करने से, असल में बचत और ऑप्टिमाइज़ेशन होता है. AppHibernationService , पैकेज को रोकने, कैश मेमोरी का डेटा मिटाने, एआरटी आर्टफ़ैक्ट मिटाने वगैरह के लिए, सिस्टम के अलग-अलग हिस्सों से कम्यूनिकेट करता है.
Android 11 और उससे पहले के वर्शन वाले डिवाइसों पर, अनुमतियों के अपने-आप वापस होने की सुविधा को बनाए रखने के लिए, अनुमतियों को वापस लेने की प्रोसेस सीधे AppHibernationJobService से शुरू की जाती है.
उपयोगकर्ता अनुभव
उपयोगकर्ता को इस बारे में जानकारी दी जाती है कि किन ऐप्लिकेशन को हाइबरनेट किया जा सकता है. साथ ही, उसे इन ऐप्लिकेशन को कंट्रोल करने की सुविधा भी मिलती है.
अनुमतियों के अपने-आप वापस होने की सुविधा की तरह, उपयोगकर्ता को इस बारे में सूचना मिलती है कि किन ऐप्लिकेशन को हाइबरनेट किया गया है. साथ ही, उसके पास सूचना से सीधे सेटिंग में जाने का विकल्प होता है. इससे वह ऐप्लिकेशन को खोलकर उसे हाइबरनेशन से बाहर ला सकता है या ज़रूरत पड़ने पर, इस्तेमाल न किए गए ऐप्लिकेशन को मिटा सकता है.
हम डेवलपर के इस इरादे का समर्थन करना जारी रखते हैं कि वह उपयोगकर्ता से हाइबरनेशन से छूट पाने के लिए अनुरोध करे. इसके लिए, हम अनुमतियों के अपने-आप वापस होने की सुविधा से छूट पाने के मौजूदा इंटेंट का इस्तेमाल करते हैं.
पिछले वर्शन के गेम खेलने की सुविधा
हाइबरनेशन से जुड़ी सुविधाएं, Android 12 और उसके बाद के वर्शन में उपलब्ध हैं. यह सुविधा, पहले के वर्शन में काम नहीं कर सकती, क्योंकि प्लैटफ़ॉर्म के कॉम्पोनेंट (जैसे, नई सिस्टम सेवा) मौजूद नहीं हैं. अनुमतियों के अपने-आप वापस होने की सुविधा, OS के पहले के वर्शन के लिए लागू किए गए तरीके से काम करती है.
Android 12 और उसके बाद के वर्शन में, पिछले वर्शन के साथ काम करने की सुविधा को पक्का करने के लिए, सेटिंग में ऐप्लिकेशन और सूचनाएं में जाकर, ऐप्लिकेशन के पेज पर हाइबरनेशन टॉगल जोड़ा गया है. साथ ही, अनुमतियां सब-मेन्यू में, अनुमतियों के अपने-आप वापस होने की सुविधा का ओरिजनल टॉगल भी रखा गया है. यह टॉगल, ऐप्लिकेशन के लिए, ऐप्लिकेशन हाइबरनेशन सिस्टम की छूट को कंट्रोल करता है.
पसंद के मुताबिक बनाएं
इस्तेमाल की कुछ जानकारी, मॉड्यूलर सिस्टम कॉम्पोनेंट का हिस्सा है. इसलिए, पार्टनर को इस सुविधा में बदलाव करने से मना किया जाता है. हालांकि, पार्टनर, CDD की ज़रूरी शर्तों का पालन करते हुए, इसी तरह की सुविधाएं या फ़ंक्शन लागू कर सकते हैं.
Android 11 या उसके बाद के वर्शन को टारगेट करने वाले सभी ऐप्लिकेशन के लिए, ऐप्लिकेशन हाइबरनेशन की सुविधा डिफ़ॉल्ट रूप से चालू होनी चाहिए. यह सुविधा, अनुमतियों के अपने-आप वापस होने की सुविधा की तरह है. हालांकि, सेटिंग चालू हो सकती है, लेकिन Android 11 को टारगेट करने वाले ऐप्लिकेशन और Android 12 को टारगेट करने वाले ऐप्लिकेशन के लिए, ऐप्लिकेशन हाइबरनेशन की सुविधा अलग-अलग हो सकती है. खास तौर पर, ऐप्लिकेशन हाइबरनेशन की सुविधा सिर्फ़ Android 11 को टारगेट करने वाले ऐप्लिकेशन के लिए काम करती है. वहीं, Android 12 को टारगेट करने वाले ऐप्लिकेशन के लिए, यह सुविधा सिर्फ़ अनुमतियों के अपने-आप वापस होने की सुविधा है.
इसके अलावा, OEM इसी तरह की कोई सुविधा लागू कर सकते हैं. हालांकि, इन सुविधाओं को बैटरी ऑप्टिमाइज़ेशन के लिए, बहुत कम समय के लिए टारगेट किया जाता है. यह OEM के हिसाब से अलग-अलग हो सकता है. OEM की ओर से विकसित की गई, ऐप्लिकेशन पर पाबंदी लगाने वाली इसी तरह की कोई भी सुविधा , ऐप्लिकेशन हाइबरनेशन सिस्टम के साथ काम कर सकती है. हालांकि, इसके लिए ज़रूरी है कि वे CDD में तय की गई मौजूदा शर्तों को पूरा करती हों.
जांच करना
ऐप्लिकेशन हाइबरनेशन की सुविधा, CTS और यूनिट टेस्ट पास करती है, ताकि यह पक्का किया जा सके कि यह ठीक से काम कर रही है.
AutoRevokeTestAppHibernationIntegrationTest