2012-10-30 23 views
5

Mam aplikację dla systemu Android, która używa licznika czasu do wywoływania AsyncTask co 5-10 sekund (przy użyciu java.util.Timer i java. util.TimerTask). AsyncTask pobiera dane obrazu z bazy danych Amazon AWS S3 i ładuje obraz dla głównej aktywności UI.Błąd systemu Android: "Nie można utworzyć epollo wystąpienie" lub "Nie można utworzyć stopu wake" "

To działa dobrze przez godzinę lub dwie, ale potem pojawia się tajemniczy komunikat o błędzie i aplikacja zostaje zabita. Komunikat o błędzie pochodzi od „Looper” i mówi, albo:

Could not create epoll instance. errno=24 

lub

Could not create wake pipe 

Poszukiwania w internecie wydaje się wskazywać, problem może mieć coś wspólnego z deskryptorów (zbyt wiele otwartych plików deskryptory ?). Przejrzałem kod, ale nie widzę żadnego miejsca, w którym pliki, strumienie lub połączenia nie są zamknięte.

Kiedy aplikacja zostanie zabity, logcat ma wiadomość z Android Runtime, który mówi:

FATAL EXCEPTION: main 

Czy ktoś ma pojęcia o tych wiadomościach lub jak to naprawić? Dziękuję Ci!

+0

Napisz kod. – Wug

+0

Jest dużo kodu i nie jestem pewien, które części mogą być przyczyną błędu. W większości szukam wskazówek, co może powodować komunikat o błędzie, taki jak ten. Dzięki. – gcl1

+0

Podejrzewam, że internet ma rację co do deskryptorów plików, opublikuj część wywoływaną przez timer. – Wug

Odpowiedz

0

INFORMACJE DODATKOWE: Poniższy kod znajduje się w Fragmentie.

Oto kod, który uruchamia zegar:

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

Oto metoda zwana przez timer:

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

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

I tu jest, gdy praca zostanie zrobione (poprzez AsyncTask że ładunki ImageView ze zdalnie przechowywanych filename):

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

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

mam ten sam błąd w moim kodu, kiedy stosuje się alarm, aby uruchomić zadanie zbyt szybko.

Naprawiłem to zmieniając mój kod tak, aby został dodany do alarmu, aby był uruchamiany ponownie po średnim czasie pracy metody (plus trochę dodatkowego czasu na wszelki wypadek). Jeśli dodasz zadania szybciej, niż kończą wykonywanie, to w końcu wypełnisz Looper, który zgłasza błąd.

Zasadniczo wszystko, co Looper jest kolejką rzeczy do uruchomienia przez wątek z mojego zrozumienia.

0

możliwy wyciek pamięci. Użyj Leakcanary, aby wykryć, która dokładna część kodu to tworzy.

Powiązane problemy