2017-09-27 25 views
8

में पूर्ण, एकल, शायद और समाप्त करने वाले ऑब्जर्वेबल का निपटान करने के लिए सर्वश्रेष्ठ अभ्यास मैं इसे एंड्रॉइड परिप्रेक्ष्य से पूछ रहा हूं, लेकिन यह सामान्य रूप से आरएक्सजेवा पर लागू होना चाहिए।आरएक्सजेवा

एक सबसे अच्छा अभ्यास के रूप में, मेरे विचार हमेशा भी अल्पकालिक Completable, Single, Maybe और Observable आरएक्स प्रकार है कि छोटे क्रम में समाप्त करना चाहिए समाप्त के निपटान करना चाहिए, लेकिन अभी भी उपयोगकर्ता को देखने बंद कर देता है जब क्रियान्वित किया जा सकता है? मुझे पता है कि जब आरएक्स श्रृंखला समाप्त हो जाती है, तो इसका निपटारा किया जाता है लेकिन दृश्य बंद होने के कुछ समय बाद यह संभवतः हो सकता है।

उदाहरण के लिए, एक Single जो HTTP प्राप्त कर रहा है। कॉल पूरा हो जाएगा, लेकिन दृश्य के बाद यह अस्थायी रूप से कचरा संग्रह को रोकने के बाद हो सकता है।

और एक CompositeDisposable हैं, मुझे लगता है कि देखभाल clear() लिए लिया जाना चाहिए या अन्यथा CompositeDisposable के आकार में असीम वृद्धि को रोकने के लिए नियमित रूप से इन Disposable रों को दूर लगता होगा एक लंबे समय से रहते थे ध्यान में रखते हुए इस तरह के Disposable रों इकट्ठा करने के लिए प्रयोग किया जाता है?

+0

'Completable' को निपटाने के लिए उत्तर देखना अच्छा लगेगा, ऐसा लगता है कि यह नीचे शामिल नहीं है। –

उत्तर

3

ऐसी समस्याओं से बचने के लिए या onDestroy में CompositeDisposable का निपटान करना एक अच्छा अभ्यास है।

6

एक सबसे अच्छा अभ्यास के रूप में, मेरे विचार हमेशा भी अल्पकालिक completable, एकल के निपटान करना चाहिए, हो सकता है कि और प्रत्यक्ष आरएक्स प्रकार

आप दूसरों के साथ कोड शेयर कर रहे हैं समाप्त, एक सबसे अच्छा अभ्यास के रूप में , मैं कहने जा रहा हूं हाँ आपको का निपटान करना चाहिए। हालांकि यह अतिरिक्त बॉयलर प्लेट की तरह प्रतीत हो सकता है, यह अगले डेवलपर को आपके सब्सक्रिप्शन कोड में हुक करने की कोशिश करने से रोक देगा और उन घटकों तक पहुंचने का प्रयास करेगा जो अब मौजूद नहीं हो सकते हैं (यानी ContextFragment अलग हो गया है ... आदि)।

और अगर एक CompositeDisposable लंबे समय तक रहा ध्यान में रखते हुए इस तरह के Disposables इकट्ठा करने के लिए प्रयोग किया जाता है, मुझे लगता है कि देखभाल CompositeDisposable के आकार में असीम वृद्धि को रोकने के स्पष्ट करने के लिए लिया जाना चाहिए() या अन्यथा नियमित रूप से इन Disposables को दूर लगता होगा ?

मैं यह इंगित करना चाहता हूं कि rxjava2, CompositeDisposable के पास एक राज्य है; एक बार जब आप dispose() पर कॉल करते हैं, तो बाद में Disposable जोड़ा गया तुरंत तत्काल निपटान किया जाएगा। तो एक सबसे अच्छा अभ्यास के रूप में:

  1. जीवन चक्र की शुरुआत (onCreate(...) आदि) पर नए सिरे से CompositeDisposable बनाने
  2. क्योंकि उस समय अपने कॉलबैक व्यावहारिक रूप से कोई मूल्य नहीं है और सिर्फ पकड़े है द्वारा onDestroy(...) में dispose() की देखभाल संसाधनों।
+0

बस एक विचार: मुझे आश्चर्य है कि अगर किसी ने नए [एंड्रॉइड आर्किटेक्चर लाइफसाइकिल घटकों] (https://developer.android.com/topic/libraries/architecture/lifecycle.html) – Jon

+0

का उपयोग कर एक जीवन चक्र जागरूक समग्र डिस्पोजेबल बनाने की कोशिश की है असल में, किसी ने स्पष्ट रूप से यह बनाया था: https://github.com/uber/AutoDispose – Jon

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