6

का उपयोग कर मान लीजिए कि मैं एक flowable है कि आवेदन के विभिन्न भागों के बीच साझा किया करते बनाई निपटान के लिए की जरूरत है।मैं() प्रकाशक LiveDataReactiveStreams

प्रत्येक खंड में जहां मैं इसे देखना चाहता हूं, मैं लीक और क्रैश से बचने के लिए इसे LiveDataReactiveStreams.fromPublisher के साथ लाइवडाटा में परिवर्तित करता हूं। अब मेरे पास एक लाइवडाटा है जो मेरे फ़्लोएबल को लपेटता है।

मैं तो LiveData मेरी ViewModel करने के लिए (ViewModelFactory में) गुजरती हैं। जहां तक ​​मैं समझता हूं, मैं आगे बढ़ सकता हूं और लीक के बारे में चिंता किए बिना लाइवडाटा का उपयोग कर सकता हूं।

अब, लाइवडाटा को सीधे देखने के बजाय, मैं इसे वापस LiveDataReactiveStreams.toPublisher और Flowable.fromPublisher के साथ फ़्लोएबल में बदलने और इसके बजाय फ़्लोएबल की सदस्यता लेने के लिए प्रेरित हूं। यह अब एक फ्लोएबल है जो एक लाइवडाटा को लपेटता है जो एक फ्लोएबल

लपेटता है मेरा प्रश्न है: क्या मुझे इस फ़्लोबल के सब्सक्रिप्शन को निपटाने के बारे में चिंता करने की ज़रूरत है? मेरी आशा यह है कि लाइवडाटा "अवरोध" के रूप में कार्य करेगा, जो मेरे संदर्भ को रूट फ्लोबल पर वापस ले जाने के लिए रोक देगा, लेकिन मुझे इसके बारे में इतना यकीन नहीं है।

दूसरे शब्दों में:

  1. flowable एक एक वैश्विक संदर्भ
  2. प्रत्येक खंड में, एक LiveData बी जो टुकड़े की एक संपत्ति के रूप में सेट किया गया है में लपेटा जाता है में मौजूद है ViewModel
  3. जब सामान्य रूप से मैं LiveData निरीक्षण होगा बी, मैं बजाय flowable में लपेट सी
  4. मैं सी flowable और लौट आए डिस्पोजेबल

विचारों विल एक अप करने के लिए लीक सी में पहुँचा उपेक्षा जब टुकड़ा नष्ट हो जाता है की सदस्यता?

उत्तर

1

current implementation ध्यान में रखते हुए, आप अब भी सदस्यता के लिए देखभाल करने के लिए की जरूरत है। जीवन चक्र का उपयोग केवल लाइव डेटा के अवलोकन को संभालने के लिए किया जाता है।

mLiveData.observe(mLifecycle, LiveDataSubscription.this); 

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

+0

मैं समझता हूँ कि यह मेरे लिए सदस्यता समाप्त नहीं करता है, लेकिन मेरे सवाल यह है: यह वास्तव में रिसाव जब टुकड़ा नष्ट हो जाता है जाएगा? यदि हां, तो यह रिसाव कहां/कैसे होता है? –

+0

यह प्रकाशक को आपकी सदस्यता रिसाव करेगा। – tynn

+0

मैं इतनी दूर तुम्हारे साथ हूँ, लेकिन प्रकाशक नहीं होगा जी सी: (सदस्यता के साथ) एड जब टुकड़ा जीसी है: एड? जहां तक ​​मैं देख सकता हूँ, यहाँ बनाया सभी संदर्भों को गोल हैं, जो हो रहा –

संबंधित मुद्दे