प्रॉडक्ट से जुड़ी खबरें

ऐप्लिकेशन को ज़्यादा मेमोरी लिमिट के लिए तैयार किया जा रहा है

पढ़ने में 2 मिनट लगेंगे
ब्लेयर हारमोन की प्रोफ़ाइल देखें
Blair Harmon प्रॉडक्ट मैनेजमेंट के डायरेक्टर, Android प्लैटफ़ॉर्म

Android का मुख्य मकसद, लोगों को बेहतरीन अनुभव देना है. इस वादे को पूरा करने के लिए, यह ज़रूरी है कि डिवाइस तेज़ी से काम करें, रिस्पॉन्सिव हों, और भरोसेमंद हों. इसलिए, मेमोरी ऑप्टिमाइज़ेशन अब पहले से ज़्यादा ज़रूरी हो गया है.  पूरे ईकोसिस्टम में, मेमोरी की कीमत में बढ़ोतरी की वजह से नए डिवाइसों में मेमोरी की क्षमता को बनाए रखा जा रहा है या कम किया जा रहा है. हालांकि, उपयोगकर्ता अब भी ऐप्लिकेशन के इस्तेमाल के दौरान बेहतर अनुभव की उम्मीद रखते हैं.

Android 17 में, हमने हर ऐप्लिकेशन के लिए मेमोरी की सीमाएं तय करने की सुविधा शुरू की. इसकी शुरुआत Pixel डिवाइसों से की गई है. इससे, हम उपयोगकर्ताओं को ऐसे ऐप्लिकेशन से बचा पाएंगे जो बहुत ज़्यादा मेमोरी का इस्तेमाल करते हैं और पूरे सिस्टम को धीमा कर देते हैं. आने वाले साल में, ज़्यादा से ज़्यादा मैन्युफ़ैक्चरर, Android के हर ऐप्लिकेशन के लिए मेमोरी की सीमाओं का इस्तेमाल करेंगे. ऐसा वे अपने डिवाइसों के रैम कॉन्फ़िगरेशन के पोर्टफ़ोलियो में करेंगे. इसमें 4 जीबी से लेकर 16 जीबी या इससे ज़्यादा रैम वाले डिवाइस शामिल हैं. अगर आपका ऐप्लिकेशन इन सीमाओं से ज़्यादा डेटा इस्तेमाल करता है, तो उसकी परफ़ॉर्मेंस धीमी हो जाएगी. साथ ही, उसे बंद भी किया जा सकता है. ओएस थ्रॉटलिंग को रोकने और उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, अपने ऐप्लिकेशन की मेमोरी फ़ुटप्रिंट को ऑप्टिमाइज़ करना ज़रूरी है.  

इस पोस्ट में, हम यह जानेंगे कि ये सीमाएं कैसे काम करती हैं. साथ ही, Android की ज़रूरी जानकारी की नई मेट्रिक का इस्तेमाल करके, किसी प्रोग्राम के चलने के दौरान, इस्तेमाल की जाने वाली मेमोरी (मेमोरी फ़ुटप्रिंट) को मेज़र करने का तरीका और अपने ऐप्लिकेशन या गेम को ऑप्टिमाइज़ करने के लिए ज़रूरी चरणों के बारे में जानेंगे.

मेमोरी की सीमाओं के बारे में जानकारी 

जब आपका ऐप्लिकेशन, मेमोरी बजट की सीमा पार कर जाता है, तो Android डिवाइस की परफ़ॉर्मेंस को सुरक्षित रखने के लिए, ये कार्रवाइयां करता है:

  1. zRAM स्वैपिंग: अगर आपका ऐप्लिकेशन, तय की गई सीमा तक पहुंच जाता है, तो सिस्टम आपके ऐप्लिकेशन के पेजों को zRAM (कंप्रेस की गई रैम) में भेज देता है.  zRAM, पेजों को तुरंत हटाने से रोकता है. हालांकि, पेजों को कंप्रेस और डीकंप्रेस करने से सीपीयू पर ज़्यादा असर पड़ता है. इससे यूज़र इंटरफ़ेस (यूआई) में रुकावट आ सकती है और परफ़ॉर्मेंस धीमी हो सकती है.
  2. प्रोसेस बंद करना: अगर आपका ऐप्लिकेशन, zRAM थ्रेशोल्ड से ज़्यादा मेमोरी का इस्तेमाल करता रहता है, तो सिस्टम इसे बंद कर देगा.  यह पता लगाने के लिए कि फ़ील्ड में इन पाबंदियों की वजह से, आपके ऐप्लिकेशन सेशन पर असर पड़ा है या नहीं, ApplicationExitInfo के अंदर getDescription() को कॉल किया जा सकता है.  अगर सिस्टम ने सीमा लागू की है, तो बाहर निकलने की वजह REASON_OTHER के तौर पर रिपोर्ट की जाती है. साथ ही, ब्यौरे वाली स्ट्रिंग में "MemoryLimiter:AnonSwap" शामिल होगा.  TRIGGER_TYPE_ANOMALY का इस्तेमाल करके, ट्रिगर पर आधारित प्रोफ़ाइलिंग का भी फ़ायदा लिया जा सकता है. इससे मेमोरी की सीमा पूरी होने पर, हीप डंप अपने-आप कैप्चर हो जाते हैं.  

हर ऐप्लिकेशन के लिए मेमोरी की सीमाएं और सिस्टम लागू करने के बारे में ज़्यादा जानने के लिए, Android 17 के लिए ऐप्लिकेशन की मेमोरी की सीमाओं से जुड़ा दस्तावेज़ पढ़ें. अपने ऐप्लिकेशन को अलग-अलग डिवाइस कॉन्फ़िगरेशन पर टेस्ट करने के लिए, मेमोरी लिमिट करने वाले adb कमांड का इस्तेमाल करें. 

मेमोरी से जुड़ी समस्याओं को मॉनिटर करना और उनका पता लगाना

जिस चीज़ को मापा नहीं जा सकता उसे ऑप्टिमाइज़ नहीं किया जा सकता. Android नेटवर्क में मेमोरी लीक, बहुत ज़्यादा हीप ऐलोकेशन, और आउट-ऑफ़-मेमोरी (ओओएम) क्रैश की पहचान करने के लिए, मॉनिटरिंग के पूरक टूल का इस्तेमाल करना ज़रूरी है:

  • Android की ज़रूरी जानकारी की मदद से, ऐप्लिकेशन की परफ़ॉर्मेंस की खास जानकारी: Google Play Console में मौजूद Android की ज़रूरी जानकारी की मदद से, ऐप्लिकेशन की परफ़ॉर्मेंस की खास जानकारी देखी जा सकती है. इससे ज़्यादा लोगों को ऐप्लिकेशन की परफ़ॉर्मेंस के बारे में पता चलता है. साथ ही, इससे ऐप्लिकेशन पर कोई अतिरिक्त असर नहीं पड़ता. इसमें मेमोरी का इस्तेमाल (बिना सोर्स फ़ाइल वाली आरएसएस मेमोरी और स्वैप मेमोरी) और बिटमैप के लिए मेमोरी का इस्तेमाल जैसी ज़रूरी मेट्रिक मिलती हैं. इससे आपको अलग-अलग प्रोसेस की स्थितियों (फ़ोरग्राउंड, बैकग्राउंड, उपयोगकर्ता को दिखने वाली सेवाएं, और कैश मेमोरी) और रैम क्लास की रेंज में मेमोरी डिस्ट्रिब्यूशन की खास जानकारी मिलती है. इससे आपको मेमोरी के आउटलायर का पता लगाने में मदद मिलती है.
  • Firebase Crashlytics की मदद से, मेमोरी लिमिटर से बाहर निकलने और ओओएम को ट्रैक करने की सुविधा: मेमोरी की समस्या की वजह से मुख्य मेट्रिक पर असर पड़ने से पहले, इसकी जानकारी पाने के लिए Crashlytics के वर्शन 20.1.0 में डीबग करने से जुड़ा अतिरिक्त डेटा उपलब्ध कराया गया है. इससे आपको मेमोरी से जुड़ी समस्याओं और मेमोरी लिमिटर से बाहर निकलने की गड़बड़ियों को पकड़ने, उन्हें प्राथमिकता देने, और ठीक करने में मदद मिलेगी. कस्टम लॉग और कुंजी-वैल्यू वाले मेटाडेटा के साथ-साथ इन इवेंट को ट्रैक करने से, मेमोरी फ़ेल होने पर प्रोसेस की स्थिति के बारे में तुरंत जानकारी मिलती है.
  • ProfilingManager के साथ इन-फ़ील्ड ट्रेस: जिन टीमों के पास परफ़ॉर्मेंस की निगरानी करने वाला फ़्रेमवर्क है उनके लिए, Android 15 (एपीआई लेवल 35) में पेश किया गया ProfilingManager एपीआई उपलब्ध है. इसकी मदद से, आपका ऐप्लिकेशन प्रोग्राम के हिसाब से मेमोरी डीबग करने वाले आर्टफ़ैक्ट का अनुरोध कर सकता है और उन्हें इकट्ठा कर सकता है. जैसे, Java के हीप डंप और हीप प्रोफ़ाइल. ऐसा सीधे तौर पर प्रोडक्शन डिवाइसों से किया जा सकता है. सिस्टम के कुछ खास सिग्नल के आधार पर भी, हीप डंप कैप्चर ट्रिगर किए जा सकते हैं. जैसे, TRIGGER_TYPE_OOM और TRIGGER_TYPE_ANOMALY

मेमोरी की निगरानी करने के अन्य तरीकों के बारे में ज़्यादा जानने के लिए, हमारा दस्तावेज़ पढ़ें.

खास जानकारी और आगे क्या करना है

Android ने सभी रैम क्लास के लिए, हर ऐप्लिकेशन की मेमोरी की सीमाएं बढ़ा दी हैं. इसलिए, अब आपको अपनी मेमोरी फ़ुटप्रिंट का ऑडिट करना चाहिए:

  1. मेमोरी को ऑप्टिमाइज़ करने को प्राथमिकता दें: सबसे सही तरीकों का इस्तेमाल करके, अपने ऐप्लिकेशन को मेमोरी की सीमाओं से होने वाले असर से बचाएं. 
  2. मेमोरी के इस्तेमाल पर नज़र रखेंअपने ऐप्लिकेशन की मेमोरी के इस्तेमाल पर नज़र रखें, ताकि असामान्य व्यवहार का पता लगाया जा सके और उसे ठीक किया जा सके.  
  3. अपने गेम को ऑप्टिमाइज़ करें: प्रोसेस की सभी स्थितियों में मेमोरी की बचत करने के लिए, गेम के लिए उपलब्ध नए दिशा-निर्देशों और मल्टीमीडिया वाले जटिल ऐप्लिकेशन का पालन करें.

काम के संसाधन और रेफ़रंस

लेखक:
पढ़ना जारी रखें