कैश मेमोरी में सेव किए गए ऐप्लिकेशन को फ़्रीज़ करने की सुविधा

Android 11 QPR3 या इसके बाद के वर्शन में, कैश मेमोरी में सेव किए गए ऐप्लिकेशन को फ़्रीज़ करने की सुविधा काम करती है. यह सुविधा, कैश मेमोरी में सेव प्रोसेस को बैकग्राउंड में चलने से रोकती है. साथ ही, उन ऐप्लिकेशन के संसाधन इस्तेमाल करने की क्षमता को कम करती है जो कैश मेमोरी में सेव होने के दौरान काम करने की कोशिश करते हैं. फ़्रेमवर्क, कैश मेमोरी में सेव किए गए ऐप्लिकेशन को फ़्रीज़ करता है. इसके लिए, वह उनकी प्रोसेस को फ़्रीज़ किए गए cgroup में माइग्रेट करता है. इससे, कैश मेमोरी में सेव किए गए ऐप्लिकेशन के चालू होने पर, सीपीयू के इस्तेमाल में कमी आती है. ऐप्लिकेशन फ़्रीज़र को सिस्टम कॉन्फ़िगरेशन फ़्लैग या डेवलपर विकल्प का इस्तेमाल करके चालू किया जा सकता है.

ऐप्लिकेशन फ़्रीज़ करने की सुविधा लागू करना

कैश किए गए ऐप्लिकेशन फ़्रीज़र, कर्नल cgroup v2 फ़्रीज़र का इस्तेमाल करता है. जिन डिवाइसों में इस सुविधा के साथ काम करने वाला कर्नल है वे इसे चालू कर सकते हैं. हालांकि, ऐसा करना ज़रूरी नहीं है. इसके लिए, डेवलपर विकल्प "कैश किए गए ऐप्लिकेशन के लिए एक्ज़ीक्यूशन को निलंबित करें" को चालू करें या डिवाइस कॉन्फ़िगरेशन फ़्लैग activity_manager_native_boot use_freezer को true पर सेट करें. उदाहरण के लिए:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

फ़्रीज़र तब बंद हो जाता है, जब फ़्लैग use_freezer को 'गलत है' पर सेट किया जाता है या डेवलपर विकल्प बंद होता है. सॉफ़्टवेयर रिलीज़ या अपडेट में डिवाइस के कॉन्फ़िगरेशन को बदलकर, इस सेटिंग को टॉगल किया जा सकता है.

ऐप्लिकेशन फ़्रीज़र, आधिकारिक एपीआई को ऐक्सेस नहीं करता है. साथ ही, इसमें रेफ़रंस लागू करने वाला क्लाइंट भी नहीं होता है. हालांकि, यह छिपे हुए सिस्टम एपीआई setProcessFrozen और enableFreezer का इस्तेमाल करता है. इन एपीआई के बारे में ज़्यादा जानने के लिए, ActivityManager के Process.java और ActivityManagerService API देखें. डेवलपर, एक्सपेरिमेंट के लिए ActivityManager में मौजूद क्लाइंट कोड का इस्तेमाल भी कर सकते हैं.

कस्टम सुविधाओं को मैनेज करना

आम तौर पर, कैश मेमोरी में सेव होने पर प्रोसेस से कोई काम नहीं किया जाता. हालांकि, कुछ ऐप्लिकेशन में कस्टम सुविधाएं हो सकती हैं. ये सुविधाएं, प्रोसेस की मदद से काम करती हैं. कैश मेमोरी में सेव होने पर भी इन प्रोसेस के चलने की उम्मीद की जाती है. अगर किसी ऐसे ऐप्लिकेशन को चलाने वाले डिवाइस पर ऐप्लिकेशन फ़्रीज़र की सुविधा चालू है, तो कैश मेमोरी में सेव की गई प्रोसेस फ़्रीज़ हो जाती हैं. इससे कस्टम सुविधाएं काम नहीं कर पाती हैं.

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

ऐप्लिकेशन फ़्रीज़ करने की सुविधा को टेस्ट करना

यह पुष्टि करने के लिए कि ऐप्लिकेशन फ़्रीज़र सही तरीके से काम कर रहा है, इन संसाधनों का इस्तेमाल करें:

  • adb shell dumpsys activity कमांड का इस्तेमाल करके, फ़्रीज़ की गई प्रोसेस की सूची देखें और Apps frozen: के लिए grep करें.

  • देखें कि /sys/fs/cgroup/uid_0/cgroup.freeze फ़ाइल मौजूद है या नहीं.

  • logcat देखें. इससे फ़्रीज़ और अनफ़्रीज़ की गई एंट्री दिखती हैं. ऐसा तब होता है, जब कोई प्रोसेस फ़्रीज़र में माइग्रेट होती है या उससे बाहर निकलती है. उदाहरण के लिए:

    adb logcat | grep -i "\(freezing\|froze\)"