2016-05-09 4 views
6

मैं डेटा स्टोर और पुनर्प्राप्त करने के लिए दायरे का उपयोग कर रहा हूं। आमतौर पर जब हम कुछ डेटा स्टोर करने के लिए एक दायरे खोलने हम पसंद है:Realm.getDefaultInstance द्वारा खोले गए दायरे को कैसे बंद करें?

Realm realm = Realm.getDefaultInstance(); 
realm.beginTransaction(); 
// Copy the object to Realm 
realm.copyToRealm(myObject); 
realm.commitTransaction(); 
realm.close(); 
उपरोक्त मामले मैं दायरे को बंद कर रहा हूँ में

लेकिन जब मैं जैसे कुछ डेटा पुन: प्राप्त कर रहा हूँ:

RealmResults<MyClass> results = Realm.getDefaultInstance().where(MyClass.class).findAll(); 

मैं कैसे इस दायरे को बंद करते हैं? क्या इसे बंद करने की आवश्यकता है?

उत्तर

13

इसे एक लाइनर के रूप में करने का मतलब है कि आप दायरे को बंद नहीं कर सकते हैं, इसलिए मैं इसके खिलाफ सलाह दूंगा।

दायरे को बंद नहीं करना सबसे अच्छा मामला होगा क्योंकि आप स्मृति को रिसाव कर सकते हैं और पृष्ठभूमि में सिस्टम द्वारा मारने का उच्च अवसर हो सकता है। सबसे खराब स्थिति में आपको डिस्क उपयोग में उच्च वृद्धि दिखाई देगी क्योंकि रियलम को खोले गए वास्तविक उदाहरणों के सभी संस्करणों का ट्रैक रखना है (एमवीसीसी डेटाबेस होने के कारण)।

मैं आपके पहले पैटर्न का उपयोग करके अत्यधिक सलाह दूंगा। दायरे के उदाहरणों को नियंत्रित करने के बारे में अधिक जानकारी के लिए आप इसे पढ़ सकते हैं: https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances और यह https://realm.io/news/threading-deep-dive/

+0

स्पष्टीकरण के लिए धन्यवाद। –

+0

लेकिन लॉकैट में चेतावनी के बारे में क्या है, सभी दायरे उदाहरणों पर 'बंद करने के लिए याद रखें)। Realm /data/data/com.foo.bar/files/default.realm को बंद किए बिना अंतिम रूप दिया जा रहा है, इससे मूल स्मृति से बाहर निकल सकता है। ' – zxcmehran

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