Tuesday 15 February 2011

java - 'Catching' OutOfMemoryError completely solves out-of-memory issue? -


मैं LogCat में OutOfMemoryError संदेश प्राप्त कर रहा था और मेरा ऐप दुर्घटनाग्रस्त हो रहा था क्योंकि त्रुटियों को बेमानी था। < Br>
दो चीजें OutOfMemoryError के कारण हो रही थीं:
1. स्ट्रिंग में बड़ी टेक्स्ट फाइल पढ़ना।
2. मेरे टेक्स्टएव्यू को उस स्ट्रिंग को भेजना।

बस इन दो चीज़ों में एक कैच जोड़ने से न केवल OutOfMemoryError कैच किया जाता है, लेकिन पूरी तरह से स्मृति समस्या को हल करने के लिए प्रतीत होता है।
अधिक क्रैशिंग और लॉगकैट में कोई और त्रुटि संदेश नहीं है ऐप बस पूरी तरह से चलाता है।

यह कैसे संभव है? वास्तव में क्या हो रहा है?


इस कोड के साथ, मुझे त्रुटि संदेश मिल रहा था & amp; ऐप क्रैशिंग:

  प्रयास करें {myString = new Scanner (नई फ़ाइल (myFilePath))। UseDelimiter ("\\ A")। Next (); } पकड़ (FileNotFoundException ई) {e.printStackTrace (); } MyTextView.setText (myString);  OutOfMemoryError , बस 'पकड़ने' के द्वारा, लॉगकैट में और कोई त्रुटि संदेश नहीं दुर्घटनाग्रस्त:   
  कोशिश {myString = new स्कैनर (नई फ़ाइल (myFilePath))। UseDelimiter ("\\ A")। Next (); } पकड़ (FileNotFoundException ई) {e.printStackTrace (); } पकड़ (आउटऑफ़ममेरी एरर ई) {} कोशिश {myTextView.setText (myString); } पकड़ (आउटऑफमेमरी एररा ई) {}    

मुझे लगता है कि आपकी स्ट्रिंग पूरी तरह से लोड नहीं हुई है , या यहां तक ​​कि अगर यह (यह पाठ जोड़ने के बाद त्रुटि को फेंक सकता है), तो क्या होता है, आपके ऐप के लिए उपलब्ध वर्तमान मेमोरी पर निर्भर करता है जिससे कि आउमोमोरी एरर को पकड़ना एक व्यवहार्य समाधान नहीं है।

यदि आप वास्तव में एक बड़ी स्ट्रिंग फ़ाइल लोड करना चाहते हैं और इसे EditText में प्रदर्शित करना चाहते हैं, तो मैं आपको फ़ाइल का केवल एक छोटा सा हिस्सा लोड करने की सलाह देता हूं (चलो 50 केबी कहते हैं), और कुछ लागू करें अगली 50kB लोड करने वाले बटन की तरह, पेजिंग की तरह आप EditText के माध्यम से उपयोगकर्ता स्क्रॉल के रूप में अतिरिक्त लाइन लोड कर सकते हैं।

No comments:

Post a Comment