के लिए एक और उपयोगी मामला है WeakHashMap
और WeakReference
एक श्रोता रजिस्ट्री कार्यान्वयन है ।
जब आप कुछ बनाते हैं जो कुछ घटनाओं को सुनना चाहते हैं, तो आमतौर पर आप एक श्रोता को पंजीकृत करते हैं, जैसे
manager.registerListener(myListenerImpl);
यदि manager
आपका श्रोता एक के साथ भंडार करता है WeakReference
, तो इसका मतलब है कि आपको रजिस्टर को हटाने की आवश्यकता नहीं है, manager.removeListener(myListenerImpl)
क्योंकि यह आपके श्रोता या आपके घटक द्वारा श्रोता को अनुपलब्ध होते ही स्वचालित रूप से हटा दिया जाएगा।
बेशक, आप अभी भी अपने श्रोता को मैन्युअल रूप से हटा सकते हैं, लेकिन यदि आप इसे नहीं भूलते हैं या इसे भूल जाते हैं, तो यह मेमोरी रिसाव का कारण नहीं होगा, और यह आपके श्रोता को कचरा एकत्र करने से नहीं रोकेगा।
WeakHashMap
चित्र में कहाँ आता है ?
श्रोता रजिस्ट्री जो पंजीकृत श्रोताओं को संग्रहीत करने के लिए व्हाट्सएप करता है, को WeakReference
इन संदर्भों को संग्रहीत करने के लिए एक संग्रह की आवश्यकता होती है। WeakHashSet
केवल मानक जावा लाइब्रेरी में कोई कार्यान्वयन नहीं है WeakHashMap
लेकिन हम पहले वाले की कार्यक्षमता को "लागू" करने के लिए बाद वाले का उपयोग आसानी से कर सकते हैं:
Set<ListenerType> listenerSet =
Collections.newSetFromMap(new WeakHashMap<ListenerType, Boolean>());
इसके साथ listenerSet
एक नए श्रोता को पंजीकृत करने के लिए आपको बस इसे सेट में जोड़ना होगा, और भले ही इसे स्पष्ट रूप से हटाया न जाए, अगर श्रोता को अब संदर्भित नहीं किया जाता है, तो यह JVM द्वारा स्वचालित रूप से हटा दिया जाएगा।