2016-12-01 22 views
7

otrzymuję następujące dzienniki błędów na jakimś telefonie, który następująco:Android: ANR Wejście dyspozytorskich timed out

Powód: Wejście dyspozytorskich timed out (Oczekiwanie wysłać non-key zdarzenie, ponieważ dotknął okno nie zostało zakończone przetwarzanie pewne zdarzenia wejściowe, które zostały mu dostarczone ponad 500,0 ms temu. Długość kolejki oczekujących: 20. Poczekaj na wiek głowy kolejki: 5509,9ms.)

Używam Retrofit 2 do połączeń sieciowych, w których korzystam z metody asynchronicznej, Używanie bazy danych jako dziedziny gdzie używałem asynchronicznej transakcji do pisania rzeczy. Używanie opcji Glide do ładowania obrazu.

Podczas używania trybu ścisłego okazało się, że otrzymuję dziennik kar dla współdzielonych preferencji. Dowolne inne wskaźniki do obejrzenia i debugowania problemu:

Odpowiedz

2

Wszelkie rodzaje kosztownych procedur, takich jak synchronizacja danych przez sieć, nie powinny być wykonywane pod numerem main thread. Android ma kilka domyślnych wbudowanych metod, takich jak AsyncTask, IntentService itd., Które są na worker thread. Osobiście nie mam dobrego pomysłu na Retrofit 2. Jeśli działa na main thread, w takim przypadku powinieneś użyć go w osobnym wątku.

+1

zgodnie z doposażeniem dokumentacji 2 metoda kolokacji działa w asynchronizacji. – Sutirth

+0

@Sutirth: Czy byłeś w stanie rozwiązać ten problem? – j10

+2

@jitenshah Tak, mogłem to rozwiązać. Właściwie to robiłem moją operację db pisania na głównym wątku, który był ciężki przeniósł go do asynchronicznego zadania, które działało jak czar. Używanie dziedziny jako bazy danych w Androidzie – Sutirth

Powiązane problemy