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

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

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

कैश मेमोरी में सेव किए गए ऐप्लिकेशन को फ़्रीज़ करने वाला टूल, kernel 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 एपीआई देखें. डेवलपर, एक्सपेरिमेंट के लिए ActivityManager में क्लाइंट कोड का भी इस्तेमाल कर सकते हैं.

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

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

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

ऐप्लिकेशन फ़्रीज़र की जांच करना

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

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

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

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

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