मुझे लगता है कि मैंने एक मेमोरी रिसाव को ट्रैक किया है और यह पुष्टि करना चाहता हूं कि एंड्रॉइड के बाइंडर को कैसे कार्यान्वित किया जाता है, इसके बारे में मुझे क्या सच हो सकता है। इस मामले में मेरे पास एक सेवा और गतिविधि है, प्रत्येक अपनी प्रक्रिया में है। मैंने एक एआईडीएल बनाया है जो मुझे आईपीसी विधि के माध्यम से गतिविधि से सेवा में कॉलबैक ऑब्जेक्ट पास करने की अनुमति देता है और उसके बाद कॉलबैक कॉल किया जाता है जब अनुरोध अनुरोधित कार्य के साथ किया जाता है।कचरा संग्रह को रोकने में बाइंडर
लंबे समय तक मैं सोच रहा था: यदि मैं सेवा में एक नया कॉलबैक ऑब्जेक्ट पास करता हूं और मैं अपनी गतिविधि में कॉलबैक ऑब्जेक्ट में पॉइंटर नहीं रखता हूं तो कचरा कलेक्टर अभी आगे क्यों नहीं जाता है और एकत्र नहीं करता है मेरी गतिविधि प्रक्रिया में कॉलबैक? ऐसा लगता है कि ऐसा नहीं लगता है, JVM कैसे जानता है कि कचरा कब मेरी गतिविधि में कॉलबैक एकत्र करता है।
मुझे लगता है कि जवाब यह है कि बाइंडर सिस्टम गतिविधि प्रक्रिया में मेरे कॉलबैक में एक सूचक रहता है जब तक कि सेवा प्रक्रिया में संबंधित कॉलबैक ऑब्जेक्ट को अंतिम रूप() विधि कहा जाता है, जो तब रिलीज करने के लिए गतिविधि को संदेश भेजता है सूचक क्या यह सही है? यदि नहीं, तो यह कैसे काम करता है?
मेरा मानना है कि यह है और यह दिलचस्प स्थिति की ओर जाता है, जहां गतिविधि में कॉलबैक कुछ स्मृति को गहन करने के लिए इंगित कर रहा है, तब तक इसे एकत्र नहीं किया जाएगा जब तक कि सेवा में कॉलबैक एकत्र नहीं किया जाता है। यदि सेवा मेमोरी पर कम नहीं है तो यह लंबे समय तक कॉलबैक एकत्र नहीं कर सकती है और गतिविधि में आउटऑफमेमरी एरर होने तक कॉलबैक केवल गतिविधि में बन सकता है।