2012-10-30 20 views
5

Her 5-10 saniyede bir AsyncTask çağırmak için bir zamanlayıcı kullanan bir Android uygulamasına sahibim (java.util.Timer ve java kullanarak). util.TimerTask). AsyncTask, bir Amazon AWS S3 veritabanından görüntü verileri alır ve ana Kullanıcı Arabirimi Etkinliği için bir ImageView yükler.Android hatası: "epoll örneği oluşturulamadı" veya "Wake pipe oluşturulamadı"

Bu, bir iki saat boyunca iyi çalışıyor, ancak sonra şifreli bir hata iletisi alıyorum ve uygulama öldürülüyor. Hata mesajı "Lüper" dan gelir ve ya diyor ki:

Could not create epoll instance. errno=24 

veya

Could not create wake pipe 
Bir web arama dosya tanımlayıcıları ile ilgili bir şey olabilir soruna işaret gibi görünüyor

(çok fazla açık dosya tanımlayıcılar?). Koddan geçtim, ancak dosyaların, akışların veya bağlantıların kapalı olmadığı herhangi bir yer görmüyorum.

FATAL EXCEPTION: main 

herkes bu mesajları veya nasıl düzeltileceği hakkında bir ipucu var mı:

uygulama öldürüldü

, logcat diyor AndroidRuntime bir mesajı var? Teşekkür ederim!

+0

Bazı kodlar gönderin. – Wug

+0

Çok fazla kod var ve hangi bölümlerin hataya neden olabileceğinden emin değilim. Çoğunlukla böyle bir hata mesajına neden olabilecek herhangi bir ipucu arıyorum. Teşekkürler. – gcl1

+0

İnternetin dosya tanıtıcıları hakkında doğru olduğundan şüpheleniyorum, zamanlayıcının çağırdığı kısmı yayınlayın. – Wug

cevap

0

EK BİLGİ: Aşağıdaki kodun tamamı bir Fragmedir. İşte

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

zamanlayıcı tarafından çağrılan yöntemdir: Burada

zamanlayıcıyı başlatır koddur

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

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

Ve burada iş bir AsyncTask yükler olduğunu aracılığı (bitmiş olur nerede (Bir uzaktan saklanan dosyaAdı) resim:

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

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

Ben kullandığımda aynı hatayı kodumda kullanıyorum Bir görevi çok hızlı tetiklemek için alarm.

Kodumu değiştirerek, yalnızca yöntemin ortalama çalışma süresinden sonra tekrar çalıştırılacak olan alarmı ekledim (artı durumdayken biraz fazladan zaman). Görevleri, yürütmeyi bitirdiklerinden daha hızlı eklerseniz, o zaman, hataya neden olan Looper'u doldurursunuz.

Temel olarak, tüm bir Looper, iş parçacığı tarafından benimsenen şeylerin bir sırasıdır.

0

olası bellek sızıntısı. Kodun tam olarak hangi bölümünü oluşturduğunu belirlemek için Leakcanary kullanın.