2012-10-30 17 views
5

मेरे पास एक एंड्रॉइड ऐप है जो प्रत्येक 5-10 सेकेंड में AsyncTask को कॉल करने के लिए टाइमर का उपयोग करता है (java.util.Timer और जावा का उपयोग करके। util.TimerTask)। AsyncTask को अमेज़ॅन AWS S3 डेटाबेस से छवि डेटा प्राप्त होता है, और मुख्य UI गतिविधि के लिए एक छवि दृश्य लोड करता है।एंड्रॉइड त्रुटि: "एपोल इंस्टेंस नहीं बनाया जा सका", या "वेक पाइप नहीं बना सका"

यह एक या दो घंटे के लिए ठीक काम करता है, लेकिन फिर मुझे एक गुप्त त्रुटि संदेश मिलता है और ऐप मारे जाते हैं। त्रुटि संदेश "Looper" से आता है और कहता है कि या तो:

Could not create epoll instance. errno=24 

या

Could not create wake pipe 

वेब पर एक खोज समस्या का संकेत करने के लिए फ़ाइल वर्णनकर्ता के साथ कुछ हो सकता है लगता है (भी कई फ़ाइल खोलने वर्णनकर्ता?)। मैं कोड से गुजर चुका हूं, लेकिन ऐसी कोई जगह नहीं दिखती जहां फाइलें, स्ट्रीम या कनेक्शन बंद नहीं होते हैं।

FATAL EXCEPTION: main 

किसी को भी इन संदेशों, या ठीक करने के लिए के बारे में एक सुराग है:

एप्लिकेशन मार दिया जाता है, logcat कि कहते हैं AndroidRuntime से एक संदेश है? धन्यवाद!

+0

कुछ कोड पोस्ट करें। – Wug

+0

बहुत सारे कोड हैं, और मुझे यकीन नहीं है कि कौन से हिस्सों में त्रुटि हो सकती है। मैं ज्यादातर इस तरह के किसी त्रुटि संदेश के कारण किसी भी सुराग की तलाश कर रहा हूं। धन्यवाद। – gcl1

+0

मुझे संदेह है कि इंटरनेट फ़ाइल डिस्क्रिप्टर के बारे में सही है, टाइमर द्वारा आमंत्रित किए जाने वाले भाग को पोस्ट करें। – Wug

उत्तर

0

अतिरिक्त जानकारी: निम्नलिखित कोड एक टुकड़े में है। यहाँ

private void timerMethod() 
{ 
    Activity activity = getActivity(); 

    if (activity != null) 
     activity.runOnUiThread(timerTick); 
} 

और जहां काम किया जाता है (एक AsyncTask कि लोड के माध्यम से है:

slideTimer = new Timer(); 
    slideTimer.schedule(new TimerTask() {   
     @Override 
     public void run() { 
      timerMethod(); 
     } 
    }, 0, 5000); 

यहाँ विधि टाइमर द्वारा कहा जाता है:

यहाँ कोड है कि टाइमर शुरू होता है एक दूर से संग्रहीत fileName से imageView):

final Runnable timerTick = new Runnable() { 
    public void run() { 

    MyAsyncTask task = new MyAsyncTask(imageView); 
    task.execute(fileName); 
}; 
-1

मैं जब मैं एक प्रयोग किया जाता मेरी कोड में ही बग मिला एक कार्य बहुत जल्दी ट्रिगर करने के लिए अलार्म।

मैंने इसे अपना कोड बदलकर तय किया ताकि यह विधि के औसत रन टाइम के बाद अलार्म में जोड़ा जा सके (साथ ही मामला थोड़ा अतिरिक्त समय)। यदि आप निष्पादन समाप्त करने से अधिक कार्यों को अधिक तेज़ी से जोड़ते हैं तो आप अंततः लूपर भर देंगे जो त्रुटि को फेंकता है।

अनिवार्य रूप से यह कि लूपर मेरी समझ से धागे द्वारा चलने वाली चीजों की एक कतार है।

0

संभावित मेमोरी लीक। यह पता लगाने के लिए कि कोड का कौन सा सटीक हिस्सा यह बना रहा है, Leakcanary का उपयोग करें।

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