Czy ANR jest wyjątkiem, błędem, czy co? Czy rzeczywiście możemy go złapać w strukturze try{} catch(){}
?Czy "ANR" jest wyjątkiem lub błędem, czy co?
Odpowiedz
ANR (Aplikacja nie odpowiada) nie jest dokładnie błędem. Jest wyświetlany, gdy aplikacja jest bardzo powolna i zajmuje dużo czasu, aby odpowiedzieć, co powoduje, że użytkownik czeka. Użytkownik nie doceni, jeśli aplikacja sprawi, że będą czekać długo. Tak więc platforma Android daje użytkownikowi opcję zamknięcia aplikacji. http://developer.android.com/guide/practices/design/responsiveness.html
Występuje, gdy wykonywane są długie operacje na głównym wątku. System nie może przetwarzać interakcji użytkownika w tym okresie, ponieważ główny wątek jest zablokowany. Rozwiązaniem jest wykonywanie ciężkich operacji w wątku roboczym i utrzymywanie głównego wątku za darmo.
Aplikacja nie odpowiada (ANR) dialogowe
Jak można sobie wyobrazić, jeśli główny wątek jest zajęty z ciężkim obliczenia lub czytanie dane z gniazdka sieciowego, nie może natychmiast reagować na działania użytkownika takiego jako dotknij lub przeciągnij.
Aplikacja, która nie reaguje szybko na interakcję z użytkownikiem, będzie odczuwać brak odpowiedzi na pytanie: - widoczne jest więcej niż kilkaset milisekund opóźnienia, co oznacza . Jest to tak poważny problem, że platforma Android chroni użytkowników użytkowników przed aplikacjami, które robią za dużo w głównym wątku.
Wskazówka:
Jeśli aplikacja nie reaguje na działania użytkownika w ciągu FVE sekund, użytkownik ujrzy aplikacja nie Odpowiadając okno (ANR) i będą oferowane opcję, aby zamknąć aplikację.
Poniższy zrzut ekranu pokazuje typowy dialog Android ANR:
Android ciężko pracuje, aby zsynchronizować interfejs użytkownika odświeża z szybkości odświeżania sprzętowego. Oznacza to, że ma on na celu przerysowanie z szybkością 60 klatek na sekundę, czyli , czyli 16,67 ms na ramkę. Jeśli pracujemy nad głównym wątkiem, który zajmuje w dowolnym miejscu blisko 16 ms, ryzykujemy, że wpłynie to na szybkość klatek, powodując animacje Janka-jąkanie , nierówne przewijanie i tak dalej.
Idealnie, oczywiście, nie chcemy zrzucać pojedynczej ramki. Jank, brak reakcji, , a zwłaszcza ANR, oferują bardzo słabe wrażenia użytkownika, co przekłada się na złe recenzje i niepopularne aplikacje. Regułą do życia przy budowaniu aplikacji Android jest: nie blokuj głównego wątku!
Wskazówka:
Android dostarcza użytecznej ścisłe ustawienie trybu w Opcjach programistów na każdym urządzeniu, które fl ash będzie na ekranie, gdy aplikacje wykonują operacje długo działa na głównym wątku.
Dalsza ochrona dodano do platformy w strukturze plastra miodu (poziom API 11), z wprowadzeniem nowej klasy wyjątkiem, NetworkOnMainThreadException, podklasy z RuntimeException który jest odrzucany, jeśli system wykryje aktywność sieci inicjowane na głównym gwintem .
Źródło:
Asynchronous Android Programowanie - Second Edition - Helder Vasconcelos - lipiec 2016
- 1. Czy obietnica powinna zostać odrzucona z błędem lub ciągiem znaków?
- 2. Czy optymalizacja wartości zwracanej (RVO) nie jest błędem?
- 3. Czy fakt, że foo (a: b, d.x) jest nielegalnym coffeescriptem jest błędem tłumacza lub części języka?
- 4. Co jest nie tak z nowym Wyjątkiem?
- 5. Co jest nie tak z moim wyjątkiem?
- 6. Czy ktoś może rzucić nieco światła na ten dziennik ANR?
- 7. Różnica między wyjątkiem: i wyjątkiem Wyjątkiem:
- 8. Czy przypisanie lub warunkowe powiązanie jest silniejsze?
- 9. Czy jest to błąd lub funkcja ManagementScope?
- 10. Czy Webhooks jest stylem/wzorem lub specyfikacją?
- 11. Widżet debugowania powoduje ANR
- 12. Android ANR SurfaceView
- 13. Co jest szybsze: Union czy Concat?
- 14. Wykrywanie, czy _ jest domieszką lub podkreślnikiem
- 15. Co to jest pojedynczy | lub?
- 16. Co jest szybsze w pamięci, intach lub znakach? Czy mapowanie plików lub czytanie fragmentów?
- 17. Webview powoduje ANR
- 18. Posłuchaj i odpowiedz na ANR?
- 19. Co jest szybsze? File_exist lub zapytanie MySQL?
- 20. Sprawdź, czy ścieżka jest bezwzględna lub względna.
- 21. Sprawdzanie, czy wielokąt jest prosty lub złożony
- 22. Sprawdź, czy łącze jest wewnętrzne lub zewnętrzne
- 23. Ustal, czy znak jest liczbą lub literą
- 24. Sprawdź, czy wniosek jest GET lub POST
- 25. Czy bardziej wydajne jest rozgałęzianie lub mnożenie?
- 26. Czy ASP.Net jest językiem skryptowym lub ramowym?
- 27. Czy nagi `char32_t` jest podpisany lub unsigned?
- 28. Czy curl_easy_perform() jest synchroniczna lub asynchroniczna?
- 29. Czy Django jest dla frontendu lub zaplecza?
- 30. Sprawdź, czy argument jest plikiem lub katalogiem
zapomniałeś wspomnieć co platforma używasz. –
Poszukaj "I/Choreographer (xxx): Pominięto ramki xxx! Aplikacja może wykonywać zbyt wiele pracy nad głównym wątkiem." w twoim logcat. Może to pomóc w znalezieniu problemu. – Christ
Wygląda na to, że jest "czym" – Kirby