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

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 API को देखें. डेवलपर, एक्सपेरिमेंट के लिए 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\)"