2015-05-28 4 views
6

मैं वर्तमान में एक ऐप पर काम कर रहा हूं जो आईओएस और एंड्रॉइड पर चलता है। ऐप का मूल सी ++ में लिखा गया है और समय के साथ अधिक से अधिक स्मृति आवंटित करता है। बात यह है कि मैं एक ही समय में जितना संभव हो उतना स्मृति उपयोग करने और ऐप की स्थिरता सुनिश्चित करने में सक्षम होना चाहता हूं।मोबाइल उपकरणों पर विश्वसनीय मेमोरी जानकारी कैसे प्राप्त करें?

बेशक, ऐसा करने के लिए मुझे यह जानना होगा कि मैं कितनी मेमोरी का उपयोग कर सकता हूं। इस तरह, अगर मैं थोड़ी देर बाद देखता हूं कि मुझे इसके मुकाबले ज्यादा आवश्यकता होगी, तो मैं ओएस द्वारा दुर्घटनाग्रस्त होने या दुर्घटनाग्रस्त होने की बजाय आवंटन रोक सकता हूं।

समस्या यह है कि, विभिन्न समाधान पढ़ने और कोशिश करने के बाद, मेरी भावना वह जानकारी है जिसे आप गतिशील रूप से प्राप्त करते हैं, वह पर्याप्त विश्वसनीय नहीं है। उदाहरण के लिए, iOS पर के लिए:

[NSProcessInfo processInfo].physicalMemory 

इस विशिष्ट उदाहरण/उत्तर मैंने पढ़ा है कि विश्वसनीय नहीं हो रहा है में से एक है। ऐसा लगता है कि आपको यह सुनिश्चित करने के लिए गतिशील रूप से पर्याप्त जानकारी नहीं मिल सकती है कि आपके पास अभी भी पर्याप्त स्मृति है, क्योंकि ओएस आपके ऐप को मार देगा यदि यह बहुत अधिक स्मृति का उपयोग करता है और इससे पहले चेतावनियां भेजता है। लेकिन यह अन्य ऐप्स को बीच में भी मार सकता है, इसलिए जब मुझे पहला प्राप्त होता है तो रोकना एक इष्टतम समाधान नहीं लगता है।

बहुत सी पोस्ट पढ़ने के बाद, मैं इस विषय पर थोड़ा उलझन में हूं। आईओएस/एंड्रॉइड पर मेरे ऐप के लिए गतिशील रूप से और भरोसेमंद तरीके से जानने का कोई तरीका है? या इन ओएस से मेमोरी प्रबंधन उस के लिए बहुत अप्रत्याशित है?

सहायता के लिए धन्यवाद!

+3

एंड्रॉइड और आईओएस में मेमोरी चेतावनी के लिए श्रोताओं हैं, शायद आपके सी ++ कोड पर कॉलबैक उपयोगी होगा। आईओएस => https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html एंड्रॉइड => https://developer.android.com/training/articles/memory.html – Sulfkain

+0

धन्यवाद सल्फ़केन। इन कॉलबैक के साथ एकमात्र समस्या यह है कि वे इस अर्थ में अप्रत्याशित हैं कि आप यह नहीं जान सकते कि आप एक प्राप्त करते समय कितनी मेमोरी का उपयोग कर सकते हैं। जब मैं पहली बार प्राप्त करता हूं तो मैं रुक सकता हूं, लेकिन मैं जितना कर सकता हूं उतनी मेमोरी पाने के लिए यहां कोशिश कर रहा हूं। –

+0

मैंने कहा लेख एंड्रॉइड पर पढ़ें, शीर्षक के रूप में "जांचें कि आपको कितनी मेमोरी का उपयोग करना चाहिए" की खोज करें। वहां बताया गया है कि अधिक रैम कैसे प्राप्त करें और मेमोरी उपलब्ध कैसे करें, शायद यह उपयोगी है। आईओएस पर शायद कुछ ऐसा ही है – Sulfkain

उत्तर

2

डिज़ाइन द्वारा, आप ऑपरेटिंग सिस्टम द्वारा डिवाइस पर सभी भौतिक स्मृति का उपयोग करने से प्रतिबंधित हैं; और क्या है, ऑपरेटिंग सिस्टम की आवश्यकताएं और उस पर चल रहे अन्य ऐप्स का मतलब है कि आपके ऐप को आसानी से उपयोग करने वाली मेमोरी की मात्रा समय के साथ अलग-अलग होगी।

इसलिए पूछना कि आपने कितनी मेमोरी का उपयोग करने के लिए छोड़ा है, वास्तव में समझदार नहीं है। आपको अपने ऐप को यथासंभव छोटी मेमोरी के रूप में उपयोग करने के लिए डिज़ाइन करना चाहिए, और तब तक ऑप्टिमाइज़ करना चाहिए जब तक कि आप उससे कम उपयोग न करें।

  • डिस्क पर चीजों को कैशिंग करने के बारे में आक्रामक बनें।
  • ओएस-प्रदत्त अधिसूचनाओं को सुनें कि आपकी याददाश्त दबाव में है।
  • अपने ऐप को इस तरह से डिज़ाइन करें कि आप अपने अंतिम UI राज्य को ताजा लॉन्च से पुनर्स्थापित कर सकते हैं: ऐप लॉन्च और कार्य स्विच उपयोगकर्ता को उसी तरह प्रस्तुत किए जाते हैं, और उन्हें अंतर जानने की आवश्यकता नहीं होगी ।

यदि आप अधिक से अधिक स्मृति का उपयोग करते हैं, तो ओएस आपके ऐप्स बनाने के लिए अन्य ऐप्स को आजमाएगा और समाप्त कर देगा। इसका मतलब है, अलविदा अलविदा फेसबुक, अलविदा अलविदा ट्विटर, अलविदा मेल, अलविदा संपर्क। आपके उपयोगकर्ता नोटिस, और परिणामस्वरूप आपके ऐप को कम से कम लॉन्च करना चुनते हैं, या परिणामस्वरूप कम अनुकूलता की समीक्षा करते हैं।

+0

आपके अंक पूरी तरह से मान्य हैं, और मैं वास्तव में आपके साथ सहमत हूं, खासकर उपयोगकर्ता के परिप्रेक्ष्य से। मेरे मामले में, समस्या यह है कि मैं अपने ऐप के लिए कोई निश्चित सीमा नहीं चाहता हूं। ऐप्पल भी इसी टिप प्रदान करता है: ** "असंबद्ध समस्या सेट से बचें।" ** –

+0

हे, शायद बैटरी पर चलने वाले कंप्यूटर पर नहीं चलने की कोशिश करें और अपनी जेब में फिट बैठें :) गंभीरता से, जब मैं मस्ती के लिए देखना चाहता था * वास्तव में * कितना उपलब्ध था, मैंने जानबूझकर एक समय में 16k स्मृति को रिसाव करने के लिए एक लूप स्थापित किया, अब तक गिनती लॉगिंग और किसी भी स्मृति दबाव घटनाओं को दर्ज किया। इसने मुझे स्मृति संकेत प्रणाली के व्यवहार के बारे में कुछ संकेत दिया, लेकिन मैं समय पर किसी भी समय ओएस संस्करणों, उपकरणों या विशिष्ट उपयोगकर्ता के वातावरण में भरोसा नहीं करना चाहता। – damian

+0

हेहे ;-) यह दिलचस्प है, मैं इस समय बिल्कुल ठीक करने की कोशिश कर रहा हूं। क्या आपको इससे कोई उपयोगी जानकारी मिली? किसी भी विशेष घटना/कॉलबैक जो ओएस को ऐप मारने से ठीक पहले होता है? –

संबंधित मुद्दे