/ / गतिविधि छोड़ते समय निःशुल्क संसाधन - android, android-activity

गतिविधि छोड़ते समय नि: शुल्क संसाधन - एंड्रॉइड, एंड्रॉइड-गतिविधि

मुझे आश्चर्य हो रहा है कि क्या एंड्रॉइड में किसी गतिविधि को छोड़ने पर संसाधनों को मुक्त करना संभव है?

मेरे ऐप में कई गतिविधियाँ हैं और उनमें से एक हैबहुत स्मृति-खपत के रूप में यह उच्च गुणवत्ता की छवियों के बहुत सारे रखती है। यदि कोई इस गतिविधि में चला जाता है तो सूअर और उसके स्पर्श-आउट स्मृति-निर्गमन से बहुत दूर नहीं होते हैं। मान लें कि यह सीमा का 85% रोता है। लेकिन - यह कई गतिविधियों में से एक है और केवल एक है जो मेमोरी-खपत है। अन्य नहीं हैं - इसके केवल साक्षात्कार हैं जो कुछ पाठ रखते हैं।

मैं यह नहीं कह रहा हूं कि मेरे पास एक मेमोरी लीक है, लेकिन सुरक्षित गतिविधि पर रहने के लिए मैं इस गतिविधि को मुक्त करना चाहूंगा, जो इस गतिविधि को छोड़ती है जो छवियों को रखती है। मैं यह पता नहीं लगा सकता कि ऐसा कैसे करें?

धन्यवाद!!!

उत्तर:

जवाब के लिए 0 № 1

निर्भर करता है कि आपके संसाधन किस क्षेत्र में हैं OnDestroy () विधि आपको चाहिए उन्हें मुक्त करो और उन्हें एकत्र करने की अनुमति दें।


जवाब के लिए 0 № 2

आपके संसाधन कचरा कलेक्टर द्वारा स्वचालित रूप से साफ किए जाने चाहिए, जब वे सिस्टम द्वारा उपयोग नहीं किए जा रहे हैं, हालांकि आप इसे इस उत्तर में दिखाए गए अनुसार बाध्य कर सकते हैं: https://stackoverflow.com/a/7009362/1222050

ImageView imageView = (ImageView)findViewById(R.id.my_image);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmap.recycle();
}

इसके अलावा, यदि आप उस स्मृति को भर रहे हैं तो मैं हमारे बिटमैप के आकार को कम करने की सलाह दूंगा। जो आप इस तरह कर सकते हैं:

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));

एक प्रश्न मेरे पास है कि आप ऐप की अगली गतिविधि / भाग कैसे शुरू कर रहे हैं?


जवाब के लिए 0 № 3

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

एक BitmapDrawable एक Bitmap को लपेटता है और इसमें aएक बिटमैप का संदर्भ। बिटमैप विशेष है, क्योंकि एंड्रॉइड सभी बिटमैप के लिए पिक्सेल डेटा को एक अलग ढेर में रखता है, जिसे आपके बाकी एप्लिकेशन से अलग से प्रबंधित किया जाता है। जब एंड्रॉइड कचरा कलेक्टर एक बिटमैप ऑब्जेक्ट को साफ करता है, तो यह बिटमैप ढेर से पिक्सेल डेटा को भी साफ करता है। लेकिन आप इसे बिटमैप पर मैन्युअल रूप से रीसायकल () कॉल करके जल्द ही होने के लिए बाध्य कर सकते हैं, जो बिटमैप को अमान्य और अपने पिक्सेल डेटा को जारी करता है।

Android के लिए एक निश्चित आकार का बिटमैप ढेर आवंटित करता हैप्रत्येक रनिंग एप्लिकेशन, और आपके ऐप के लिए एक ही बार में बहुत से बिटमैप को छोड़ कर अपने ढेर को समाप्त करना संभव है। यही कारण है कि यदि आपका आवेदन बिटमैप का बड़े पैमाने पर उपयोग करता है, तो शायद आप बिटमैप को पुनर्चक्रित करने से लाभान्वित होंगे जैसे ही आप जानते हैं कि आपने "टी" की आवश्यकता है।

अद्यतन: अलग-अलग बिटमैप हीप Android के पूर्व-हनीकॉम्ब संस्करणों पर लागू होता है। हनीकॉम्ब के रूप में, बिटमैप हीप को एप्लिकेशन हीप के साथ मिला दिया गया था।