"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > FirebaseUI-Android RecyclerView में स्नैपशॉट श्रोताओं का उपयोग करते समय संसाधन लीक से कैसे बचें?

FirebaseUI-Android RecyclerView में स्नैपशॉट श्रोताओं का उपयोग करते समय संसाधन लीक से कैसे बचें?

2024-11-04 को प्रकाशित
ब्राउज़ करें:465

 How to Avoid Resource Leaks When Using Snapshot Listeners in FirebaseUI-Android RecyclerView?

FirebaseUI-Android RecyclerView में स्नैपशॉट श्रोताओं को जोड़ना और हटाना

FirebaseUI-Android वास्तविक समय डेटा के साथ RecyclerViews को पॉप्युलेट करने का एक सुविधाजनक तरीका प्रदान करता है आग्नेयास्त्र की दुकान। हालाँकि, यह समझना महत्वपूर्ण है कि संसाधन लीक से बचने के लिए स्नैपशॉट श्रोताओं को ठीक से कैसे जोड़ा और हटाया जाए। RecyclerView में प्रत्येक आइटम। पॉप्युलेटव्यूहोल्डर विधि में, आप वर्तमान आइटम के लिए दस्तावेज़ संदर्भ को पुनः प्राप्त करने के लिए getRef(i) विधि का उपयोग कर सकते हैं।

संदर्भ में परिवर्तनों को सुनने के लिए, आप addSnapshotListener(EventListener) विधि का उपयोग कर सकते हैं। यह विधि एक इवेंट लिस्टनर को एक तर्क के रूप में लेती है, जिसे संदर्भ का स्नैपशॉट बदलने पर कॉल किया जाएगा।

स्नैपशॉट श्रोता को हटाना

श्रोता को हटाना महत्वपूर्ण है जब इसकी आवश्यकता नहीं रह जाती. ऐसा न करने पर मेमोरी लीक हो जाएगी. आप लिसनररजिस्ट्रेशन ऑब्जेक्ट पर रिमूव() विधि का उपयोग करके श्रोता को हटा सकते हैं। FirebaseRecyclerAdapter की पॉप्युलेटव्यूहोल्डर विधि में श्रोता:

@Override संरक्षित शून्य पॉप्युलेटव्यूहोल्डर(अंतिम कन्वव्यूहोल्डर कन्वव्यूहोल्डर, अंतिम कन्व कन्व, इंट आई) { अंतिम स्ट्रिंग list_user_id = getRef(i).getKey(); अंतिम दस्तावेज़ संदर्भ docRef = db.collection('cities').document(list_user_id); श्रोता पंजीकरण श्रोता पंजीकरण = शून्य; यदि (श्रोता पंजीकरण == शून्य) { श्रोता पंजीकरण = docRef.addSnapshotListener(नया इवेंटListener() { @ओवरराइड सार्वजनिक शून्य ऑनइवेंट (@Nullable DocumentSnapshot स्नैपशॉट, @Nullable FirebaseFirestoreException e) { यदि (ई != शून्य) { Log.w(TAG, "सुनना विफल रहा।", e); वापस करना; } यदि (स्नैपशॉट != शून्य && स्नैपशॉट.मौजूद()) { Log.d(TAG, "वर्तमान डेटा:" snapshot.getData()); } अन्य { Log.d(TAG, "वर्तमान डेटा: शून्य"); } } }); } }इस उदाहरण में, श्रोता पंजीकरण चर को शून्य के रूप में प्रारंभ किया गया है। फिर, if स्टेटमेंट के अंदर, श्रोता को जोड़ा जाता है यदि इसे अभी तक नहीं जोड़ा गया है।

गतिविधि जीवनचक्र विधियों में श्रोता को हटाना

श्रोता को हटाने के लिए जब गतिविधि अब दिखाई नहीं दे रही है, आप अपनी गतिविधि में ऑनस्टॉप() विधि को ओवरराइड कर सकते हैं और श्रोता पंजीकरण पर रिमूव() विधि को कॉल कर सकते हैं।

@Override संरक्षित शून्य ऑनस्टॉप() { सुपर.ऑनस्टॉप(); यदि (श्रोता पंजीकरण! = शून्य) { श्रोता पंजीकरण.निकालें(); } }

@Override
protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) {
    final String list_user_id = getRef(i).getKey();
    final DocumentReference docRef = db.collection("cities").document(list_user_id);
    ListenerRegistration listenerRegistration = null;
    if (listenerRegistration == null) {
        listenerRegistration = docRef.addSnapshotListener(new EventListener() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot snapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w(TAG, "Listen failed.", e);
                    return;
                }
                if (snapshot != null && snapshot.exists()) {
                    Log.d(TAG, "Current data: "   snapshot.getData());
                } else {
                    Log.d(TAG, "Current data: null");
                }
            }
        });
    }
}
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3