2012-09-18 4 views
10

पर उपलब्ध मेमोरी निर्धारित करना तो एंड्रॉइड पर चुनौतियों में से एक है विभिन्न डिवाइस विनिर्देशों (विशेष रूप से डिवाइस मेमोरी में)।एंड्रॉइड

मैंने अपने मॉडल ऑब्जेक्ट्स को आलसी लोड फैशन में जावा SoftReferences का व्यापक रूप से उपयोग करने के लिए लिखा है, इसलिए वीएम डेटा मॉडल के वर्तमान में उपयोग किए जाने वाले हिस्सों को ट्रिम करने के लिए स्वतंत्र नहीं है क्योंकि यह उपयुक्त दिखता है और उन्हें केवल आवश्यकतानुसार पुनर्निर्मित किया जाता है।

हालांकि, SoftReferences के साथ अभ्यास में एक चुनौती यह है कि वे कमजोर रूप से संदर्भित होने के कुछ सेकंड के भीतर साफ़ हो जाते हैं क्योंकि वीएम स्मृति पर कम होने तक आसपास लटकने के विपरीत होता है, इसलिए वे मॉडल को अनुमति देने के मामले में अच्छी तरह से काम करते हैं ट्रिम करने के लिए, लेकिन वे भी काम नहीं करते हैं, इसका मतलब है कि इसका मतलब यह नहीं है कि स्मृति में कुछ भी नहीं है। आदर्श रूप से बहुत सारी मेमोरी वाले डिवाइस पर, आप उपयोगकर्ता को स्मृति में वस्तुओं को रखने से लाभ उठाने देंगे।

परिणामस्वरूप, एलआरयू तंत्र के साथ SoftReferences को गठबंधन करना आम है, जहां एलआरयू हाल ही में संदर्भित वस्तुओं को हार्ड पॉइंटर रखता है। यह निश्चित रूप से आदर्श नहीं है क्योंकि यह मानता है कि आपके पास इन सभी शायद ही संदर्भित वस्तुओं के लिए पर्याप्त स्मृति है।

यह यह जानना भी चुनौती देता है कि एलआरयू के लिए एक अच्छा डिफ़ॉल्ट क्या है।

एक आदर्श दुनिया में, एंड्रॉयड यह कम स्मृति कॉलबैक के रूप में एक संकेत (ताकि मैं संभवतः एक छोटे से LRU के साथ शुरू कर सकता है का प्रयोग करेंगे, और समय समय पर इसे टक्कर जब तक कम स्मृति कॉलबैक तो होने वाली यह को पीछे करना शुरू कर दिया एक पाते हैं किसी डिवाइस के लिए अच्छा मूल्य), लेकिन मेरे अनुभव में यह कॉलबैक वास्तविक वीएम मेमोरी दबाव के साथ कभी नहीं लगता है।

क्या कोई यह पता लगाने के उचित तरीके से आया है कि आपका डेटा मॉडल किसी विशेष डिवाइस पर बहुत अधिक स्मृति का उपयोग कर रहा है?

+1

'आउटऑफमेमरी अपवाद' गिनती को पकड़ रहा है? https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html वहां इस्तेमाल किए गए 'memClass' का उपयोग आपके मॉडल को स्केल करने के लिए एक तरीका हो सकता है। – zapl

+0

मुझे लगता है कि OutOfMemoryErrors फेंकना शुरू कर देते हैं आप मूल रूप से hosed हैं। लेकिन लेख के लिंक के लिए धन्यवाद। –

उत्तर

0

क्या यह काम करेगा?

MemoryInfo mi = new MemoryInfo(); 
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
activityManager.getMemoryInfo(mi); 
long availableMegs = mi.availMem/1048576L; 
0

आप एंड्रॉयड NDK का उपयोग करते हैं:

#include <unistd.h> 

size_t getTotalSystemMemory() 
{ 
    long pages = sysconf(_SC_PHYS_PAGES); 
    long page_size = sysconf(_SC_PAGE_SIZE); 
    return pages * page_size; 
} 

size_t getFreeSystemMemory() 
{ 
    long pages = sysconf(_SC_AVPHYS_PAGES); 
    long page_size = sysconf(_SC_PAGE_SIZE); 
    return pages * page_size; 
} 

1

अगर आप एंड्रॉयड में उपलब्ध स्मृति निर्धारित करने के लिए चाहते हैं, तो आप जाँच कर सकते हैं या परिप्रेक्ष्य में करने के लिए जाने -> डी डी एम एस 2) दूसरी बात यह है कि आप प्रयुक्त और अप्रयुक्त स्मृति में चेक किए गए मेमोरी विश्लेषक उपकरण का उपयोग कर सकते हैं, आप स्मृति की उपलब्धता भी जांच सकते हैं।