2015-02-04 8 views
6

मैं UIL (Nosotra द्वारा) छवियों है कि सर्वर renders डाउनलोड करने के लिए उपयोग कर रहा हूँ, और यह 50 सेकंड के लिए सर्वर तक ले जाता है प्रत्येक छवि बनाने के लिए। सर्वर का टाइमआउट 15 सेकंड पर सेट है, इसलिए हमने एक मतदान तंत्र बनाया है जिसे ImageDownloader.getStream() विधि में कार्यान्वित किया गया है। डाउनलोड करने के बाद, छवियों को एक ViewPager में प्रदर्शित किए जाते हैं (android.support.v4.view.ViewPager, बस के रूप में sample करता है।)एंड्रॉइड-यूआईएल का उपयोग, डाउनलोड करना बंद कैसे करें?

उन अन्य पृष्ठों पर नेविगेट करते हैं, तो मैं फ़ाइलों को डाउनलोड के बिना मतदान बंद करना चाहते है, लेकिन यह कोई "अच्छा लगता है "डाउनलोड प्रवाह को तोड़ने का तरीका।

getStream छद्म कोड

1. Parse custom-style URI ("asdf://mypng|123455678945643563245"); 
2. Make a real world URL from it. 
3. Poll the server for the image url (causes the server to render - could take up to 1m30s). 
4. Get the stream from the URL, return the stream to caller. 
     Example Code: InputStream is = (InputStream) url.getContent(); 

क्या करने की कोशिश की है अब तक

मेरी getStream विधि से null रिटर्निंग एक NullPointerException फेंक दिया करने के लिए कारण बनता है, तो यह मूल रूप सिर्फ एक फेंकने की तरह ही है अपवाद।

जब एक अपवाद फेंक दिया जाता है, छवि रोक है, लेकिन:

  1. कुछ छवियों बाद में, मैं एक OutOfMemoryError मिलता है, तो मैं स्क्रीन पर एक त्रुटि दिखा। मुझे त्रुटि नहीं मिलनी चाहिए। मैंने पहले ही this SO question's checklist की कोशिश की है, लेकिन कुछ भी काम नहीं किया है। यह ओओएम स्टैकट्रैक है: OutOfMemoryError stacktrace nostra uil
  2. डाउनलोडिंग बंद हो जाती है, और यदि दर्शक उस पृष्ठ पर लौटने पर दृश्य को रीसायकल नहीं करेगा, तो भी मुझे वह त्रुटि पृष्ठ दिखाई देगा (कोई पुनः प्रयास नहीं)।

मैं क्या इच्छा

मैं मुझे एक "प्रतीक्षा" विधि है कि रोक वर्तमान डाउनलोड जोड़ सकते हैं और होता है करने के लिए इच्छा कतार के अंत सेट पर (वर्तमान में करने के लिए एक नया कार्य फिर से जोड़ QueueProcessingType.LIFO पर, और मैं वर्तमान पृष्ठों के बाद के बाद को पुनः जोड़ना चाहता हूं, और किसी भी नए पेज को उपयोगकर्ता को फिर से जोड़े गए लोगों पर प्राथमिकता होनी चाहिए)।

मैं OutOfMemoryError से बचने के लिए भी व्यवस्थित होगा।

कृपया मदद करें।

+1

प्रोजेक्ट के गिटहब पर [यह समस्या] (https://github.com/nostra13/Android-Universal-Image-Loader/issues/903) भी देखें। – Felix

+0

क्या आप सुनिश्चित हैं कि आपके ऐप में मेमोरी लीक नहीं है? – NOSTRA

+0

अब तक, हमने कोई भी नहीं देखा है और समस्या केवल पजे हुए दृश्यों का उपयोग करते समय पुन: उत्पन्न होती है। – Felix

उत्तर

1

समस्या यहां हो सकती है 4. छवि डाउनलोड करें, स्ट्रीम वापस करें। डाउनलोड करना - यह यूआईएल की मुख्य विशेषता है। बस नेटवर्कस्ट्रीम यहां वापस करें। इसके अलावा मेरे पास बड़ी छवियों के साथ यूआईएल पर ओओएम था और मेमोरी कैश सक्षम था। सर्वर पर आपके पास कौन सा छवि आकार है। लोड में छवि विधि आपके आकार पर नियंत्रण है। भी बहुत उपयोगी UIL GitHub कृपया 3 और 4 पैराग्राफ पढ़ें।

+0

क्षमा करें, मैंने शायद आपको फेंक दिया है, इसलिए मैंने छद्म कोड बेहतर संपादित किया है। मैंने उस जिथब पर पी 3 और पी 4 पढ़ा है - ओओएम कम महत्वपूर्ण है, मैंने सोचा कि यह एक अपवाद मिड-गेटस्ट्रीम() को फेंकने का दुष्प्रभाव था। – Felix

+2

मैं लोचदार ट्रांसकोडर के एडब्ल्यूएस से छवियों को डाउनलोड करता था, इसलिए आपके जैसे व्यवहार। मैं GetStream से शून्य वापस लौट रहा था। यह अभी भी काम कर रहा है। यह सिर्फ यूआईएल लॉग द्वारा चेतावनी दी है। इसके अलावा आप इस विधि पर जावा डॉक को उछाल सकते हैं https://github.com/nostra13/Android- यूनिवर्सल- इमेज- लोडर /ब्लोब /मास्टर/library/src/main/java/com/nostra13/universalimageloader/core/download/ImageDownloader .java IOException फेंकता है यदि छवि स्ट्रीम प्राप्त करने के दौरान कुछ I/O त्रुटि होती है छवि समर्थित यूआरआई में असमर्थित योजना (प्रोटोकॉल) असमर्थित ऑपरेशन अपवाद है – TAC

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