Šta je ANR (Aplikacija ne odgovara) na Androidu: Uzroci, posljedice i kako to popraviti

  • ANR greška ukazuje na to da je Android aplikacija prestala reagirati zbog preopterećenja niti.
  • Izbjegavanje teških operacija na niti interfejsa, korištenje sekundarnih niti i praćenje performansi ključni su za sprječavanje ANR-ova.
  • Postoji više vrsta ANR-ova ovisno o njihovom porijeklu: ulazni događaji, prijemnici emitiranja, usluge i pružatelji sadržaja.

ANR (Aplikacija ne odgovara)

Jeste li ikada naišli na onu dosadnu poruku na svom Android telefonu koja kaže "Aplikacija ne reaguje"? Sigurno jeste, i vjerovatno ste morali birati između čekanja ili prisilnog zatvaranja aplikacije. Ovo upozorenje, poznato u tehničkom svijetu kao ANR (Aplikacija ne odgovara), jedna je od najstrašnijih grešaka kod korisnika i programera Androida.. Ali šta ova greška zapravo znači, zašto se pojavljuje i kako se može ispraviti ili izbjeći? Spremite se da ga otkrijete detaljno, na jasan i direktan način, fokusirajući se na ono što je zaista važno: da vaš uređaj radi kako treba i da vas aplikacije ne izluđuju.

Kroz ovaj članak, zaronit ćemo u svemir ANR greške na Androidu. Razotkrit ćemo ne samo koncept, već i uzroke, posljedice, vrste i, naravno, najbolje dostupne strategije za otkrivanje i rješavanje ovih dosadnih blokada. Bez obzira da li ste znatiželjni korisnik, programer ili jednostavno neko ko želi znati zašto vam se telefon stalno zamrzava, ovdje ćete pronaći najpotpunije objašnjenje prilagođeno španskom jeziku.

Šta je ANR greška na Androidu?

Termin ANR odgovara na akronim od Aplikacija ne odgovara, Ili što je isto, Aplikacija ne odgovara. Ovo je vrsta kvara koja se javlja kada aplikacija na vašem Android mobilnom uređaju postane blokirana, odnosno kada prestane reagirati na korisnikove naredbe ili geste predugo.. Operativni sistem, nakon što otkrije ovaj nedostatak odgovora, pokreće dobro poznatu poruku i prisiljava vas da donesete odluku: sačekati da aplikacija reaguje ili je zatvoriti kako biste izbjegli daljnju štetu?

Ove vrste grešaka se obično javljaju kada je glavna nit aplikacije, ona odgovorna za ažuriranje interfejsa i reagovanje na bilo koji dodir ili gest, zauzeta ili blokirana duže od određenog vremenskog perioda.. Android postavlja različita vremenska ograničenja ovisno o radnji koja se izvodi (na primjer, 5 sekundi za događaje unosa poput dodira), ali suština je uvijek ista: ako aplikacija nije u stanju reagirati u tom vremenu, sistem misli da je "gladan" i upozorava vas.

Zašto se pojavljuju NRA? Glavni uzroci

Korijen ANR-a je u glavna nit, također nazvan UI ili nit interfejsa. Ova nit je odgovorna i za prikazivanje grafičkog interfejsa i za upravljanje interakcijama s korisnikom.. Ako nešto predugo zaokuplja aplikaciju (recimo, čitanje velike datoteke, upućivanje sporog mrežnog poziva ili izvršavanje vrlo složenih proračuna), aplikacija prestaje reagirati i na kraju pokreće strašni ANR.

Pogledajmo detaljno Najčešći uzroci koji mogu uzrokovati ANR na Androidu:

  • Teške ili blokirajuće operacije na glavnoj niti: Pokretanje zadataka koji oduzimaju puno vremena direktno na niti interfejsa je recept za ANR. Tipični primjeri uključuju pristup bazama podataka, čitanje ili pisanje velikih datoteka, obradu velikih slika ili upućivanje mrežnih poziva bez korištenja sekundarnih niti.
  • Sporni prijemnici emitiranja: u Prijemnik emitiranja To su komponente koje upravljaju sistemskim događajima (kao što su dolazak SMS-a ili promjene u povezivosti). Ako kod povezan s ovom komponentom traje predugo za izvršavanje, posebno ako je u prvom planu, to također može izazvati ANR.
  • Dugoročne usluge: Iako su dizajnirani da rade u pozadini, ako servis postane "preopterećen" glavnom nizu, na kraju će blokirati aplikaciju.
  • Neefikasan ili loše optimizovan kod: Loše dizajnirani algoritmi, beskonačne petlje ili zloupotreba dijeljenih resursa mogu na kraju preopteretiti niti interfejsa.
  • Problemi u komunikaciji između procesa ili servisa: Spori pozivi vanjskih API-ja, uska grla u ulazno/izlaznim operacijama i sukob resursa pri pristupu podacima koji se dijele između niti mogu izazvati zastoje.
  • Problemi izvan aplikacije: Povremeno, sam operativni sistem ili hardver mogu postati preopterećeni, iako je to rjeđe.

Otkrivanje uzroka problema zahtijeva poznavanje zadataka koje aplikacija obavlja u trenutku pada sistema, a za to postoje različite tehnike i alati koje ćemo kasnije vidjeti..

aso
Vezani članak:
Kompletan vodič za poboljšanje SEO i ASO optimizacije vaše aplikacije na Google Playu

Kada se tačno dešava ANR?

ANR (Aplikacija ne odgovara)

Android sistem ima stroga pravila za odlučivanje kada pokrenuti ANR. Ova poruka se ne pojavljuje uvijek kada je aplikacija spora.; To se dešava samo ako je glavna nit provodila više vremena nego što je dozvoljeno bez reagovanja na kritične događaje.

Najčešći scenariji koji pokreću ANR su:

  • Ako je aplikacija ne reaguje na ulazni događaj (kao što je dodir, prevlačenje ili pritisak dugmeta) u roku od 5 sekundi.
  • Ako je Prijemnik emitiranja aktivan ne završi svoje izvršenje u utvrđenim rokovima (obično 10 sekundi za događaje visokog prioriteta, 60 sekundi za ostale).
  • Ako je usluga ne dovršava metode kao što su onCreate () o onStartCommand() u vremenu koje je potrebno sistemu (na primjer, 20 sekundi za usluge u prvom planu).
  • Kada se postavi upit Pružatelj sadržaja Daljinsko povezivanje traje predugo i sistem odlučuje da prekine vezu.

Kada su ovi zahtjevi ispunjeni, sistem prikazuje iskačući dijaloški okvir, poznat kao upozorenje "Aplikacija ne odgovara". U tom trenutku možete odabrati da "čekate" ili prisilno zatvorite aplikaciju.

Vrste ANR grešaka prema njihovom porijeklu

NRA protiv Crasha

U Android univerzumu, ANR-ovi se klasificiraju prema elementu odgovornom za blokiranje aplikacije.. Važno je razumjeti svaki od njih kako bi se pravilno dijagnosticirali, jer njihovi uzroci i rješenja mogu varirati. Zatim ćemo detaljnije analizirati svaku vrstu:

Pad sistema u Androidu je neočekivani i nagli prekid rada aplikacije, obično zbog programske greške koja je čini nepopravljivom (npr. neuhvaćeni izuzetak). Aplikacija jednostavno nestane s ekrana. ANR (Aplikacija ne reaguje) se javlja kada je aplikacija zamrznuta i ne reaguje na interakciju korisnika (npr. dodire ekrana, događaje na tastaturi) tokom dužeg perioda (obično 5 sekundi za korisnički interfejs). Android sistem prikazuje dijaloški okvir korisniku s pitanjem želi li "Sačekati" ili "Zatvoriti aplikaciju". Aplikacija je tehnički još uvijek otvorena, ali nije funkcionalna.

1. ANR zbog blokiranja ulaznih događaja

Ovo je najčešće i ono što ste vjerovatno najviše puta iskusili. Do toga dolazi kada glavna nit ne reaguje brzo na radnju korisnika, kao što je dodirivanje, prevlačenje ili pritiskanje dugmeta.. Ako traje duže od 5 sekundi, sistem pretpostavlja da je aplikacija "mrtva" i prikazuje upozorenje.

Zašto se to događa? Obično zato što se na niti interfejsa izvode teške ili blokirajuće operacije: čitanje podataka, obrada slika, pristup mreži bez delegiranja zadatka sekundarnoj niti itd.

2. ANR u BroadcastReceiveru

Prijemnici emitiranja To su dijelovi koda koji reaguju na sistemske događaje. Ako je bilo koja funkcija povezana s ovom komponentom Traje duže nego što Android smatra razumnim. (na primjer, 10 ili 60 sekundi, ovisno o vrsti događaja i verziji Androida), aktivira se određeni ANR.

Na primjer, ako imate prijemnik koji osluškuje promjene u povezivosti i predugo mu treba za obradu tog signala, sistem će to kašnjenje identificirati kao ANR.

3. ANR pri pokretanju ili u uslugama

U ovom slučaju, Do greške dolazi kada servis ne može završiti fazu pokretanja, povezivanja ili obrade u predviđenom vremenu.. Na primjer, da onCreate () u onStartCommand() Ako aplikacija radi duže od 20 sekundi (u uslugama u prvom planu) ili 200 sekundi (u uslugama u pozadini), aplikacija će se srušiti i bit će prijavljena greška.

4. ANR kod pružatelja sadržaja (ContentProvider)

Manje uobičajen, ali podjednako važan uzrok. Ako aplikacija zavisi od eksternog dobavljača sadržaja i upit prekorači konfigurisano vremensko ograničenje, sistem će zatvoriti aplikaciju i obavestiti je kao ANR..

Ova vrsta ANR-a se obično otkriva kada upiti udaljenim bazama podataka ili dobavljačima podataka ne odgovaraju dovoljno brzo.

5. Ostali ANR-ovi povezani s operacijama u pozadini

Android ima zakazane zadatke (JobService) i druge komponente koje mogu biti blokirane intenzivnim zadacima. Ako su funkcije povezane s pokretanjem ili završavanjem ovih poslova spore, pojavit će se greška.

Koje su posljedice ANR-a?

Pored neugodnosti za korisnika, ANR-ovi su... direktne posljedice i na nivou iskustva i vidljivosti aplikacije na Google Playu:

  • Gubitak korisnika: Niko ne voli aplikaciju koja se ruši. Ako su ANR-ovi česti, korisnici će vjerovatnije deinstalirati aplikaciju ili ostaviti negativne recenzije.
  • Kazna na Google Playu: Google prati broj i učestalost ANR grešaka putem Android Vitalsa. Ako vaša aplikacija premaši određene pragove (na primjer, ako se ANR-ovi prikazuju u više od 0,47% dnevnih sesija), vidljivost vaše aplikacije u trgovini se smanjuje i mogli biste izgubiti pozicije na rang listi.
  • Uticaj na imidž brenda: Spora ili rušeća aplikacija odaje neprofesionalizam i stvara nepovjerenje.
  • Teškoća otklanjanja grešaka: ANR-ove može biti teško pratiti bez pravih alata, što otežava njihovo rješavanje i odgađa ažuriranja.

Neophodno je spriječiti ANR-ove i, ako se pojave, biti brz i efikasan u njihovoj dijagnozi i rješavanju.

Kako pratiti, otkrivati ​​i analizirati NRA?

S obzirom na njegov značaj, Android i treće strane su razvile specijalizirani alati za praćenje, snimanje i analizu ANR-ova i u razvoju i u proizvodnji:

Play konzola i Android Vitals

Ako ste programer, Google Play konzola nudi panel na kojem možete vidjeti i ANR greške kao što su kritični kvarovi koji utiču na vašu aplikaciju. Pomoću filtera možete otkriti:

  • Koji Android uređaji i verzije najviše pate od ANR-a?
  • Učestalost i ponavljanje ovih grešaka.
  • Podela po verzijama, zemljama i pogođenim korisnicima.

Kroz Android Vitals, vidjet ćete detaljne metrike o stabilnosti vaše aplikacije, uključujući kritične pragove i upozorenja kada se prekorači prihvatljiva stopa grešaka.

Specijalizirani alati za praćenje i dijagnostiku

Pored Play konzole, postoje i rješenja kao što su Firebase Crashlytics (koji od Androida 11 prikuplja informacije iz ANR-a), Nova relikvija (idealno za praćenje stabilnosti i analizu tragova grešaka) i druge uslužne programe kao što su Nadzornik ANR-a, koji prate stanje glavne niti i generiraju sveobuhvatne izvještaje o bilo kakvom blokiranju.

Ovi alati omogućavaju:

  • Identifikujte obrasce i trendove, kao što su modeli uređaja koji su najviše pogođeni ili verzije Androida.
  • Pribavite tragove steka koji pomažu u lociranju fragmenta koda odgovornog za ANR.
  • Izvoz tragova i logova za analizu pomoću drugih uslužnih programa (npr. ndk-stack, retrace, itd.).

Zapamtite: Što prije otkrijete i riješite ANR-ove, to će vaši korisnici biti zadovoljniji, a reputacija vaše aplikacije bolja..

Kako riješiti i spriječiti ANR? Savjeti za korisnike i programere

Strategija koju treba slijediti Zavisi od toga da li ste krajnji korisnik ili programer.. Pogledajmo oba pristupa:

Za korisnike

  • Prisilno zatvaranje i ponovno otvaranje aplikacije: Ako dobijete poruku, zatvorite je i pokušajte ponovo.
  • Ažurirajte aplikaciju: Uvijek ažurirajte svoje aplikacije. Nove verzije ispravljaju mnoge greške i poboljšavaju performanse.
  • Ažurirajte operativni sistem: Provjerite imate li najnoviju verziju Androida kompatibilnu s vašim uređajem.
  • Očistite prostor i ponovo pokrenite računar: Prezasićeni mobilni telefon može imati lošije performanse. Oslobodite prostor i ponovo pokrenite računar ako primijetite česte padove sistema.
  • Kontaktirajte programera: Ako se aplikacija i dalje ruši, potražite tehničku podršku od trgovine ili službene web stranice.

Za programere

  • Ne izvršavajte teške zadatke u glavnoj niti: Za intenzivne operacije koristite sekundarne niti, AsyncTask (u naslijeđenom kodu), korutine ili biblioteke poput WorkManagera.
  • Optimizirajte kod: Izbjegavajte neefikasne petlje, nepotrebno složene algoritme i uska grla. Koristite alate za analizu performansi.
  • Praćenje Broadcast prijemnika i usluga: Nikada ne izvršavajte duge operacije na ovim komponentama, a ako trebate izvršiti složene zadatke, učinite to u pozadini.
  • Koristite alate za profiliranje i testiranje: Testirajte aplikaciju s različitim uređajima, verzijama i mrežnim uvjetima. Korištenje emulatora i automatiziranog testiranja ključno je za otkrivanje problema prije objavljivanja.
  • Oslanjajte se na Android Vitals i Crashlytics: Pratite performanse u realnom vremenu i brzo reagirajte kada se stopa ANR-ova poveća.
  • Provjerite logove i stacktraceove: Analizirajte zapisnike praćenja kada se dogodi ANR. Dat će vam naznake o izvoru problema (spore funkcije, nepotrebna čekanja itd.).
  • Čuvajte se SDK-ova trećih strana: Ponekad loše implementiran SDK može uzrokovati pad sistema. Provjerite Play konzolu za sva povezana upozorenja.

Tipične greške i praktični primjeri ANR-a

Da bude jasnije, evo ti ga Neki stvarni primjeri ANR grešaka i kako ih riješiti:

Primjer 1: Mrežna operacija na glavnoj niti

Zamislite da vaša aplikacija šalje HTTP upit ili pristupa API-ju direktno u niti interfejsa. Ako je mreža spora, aplikacija će se srušiti i nakon 5 sekundi će se aktivirati ANR. Rješenje je jednostavno: uvijek izvršava mrežne operacije u sekundarnoj niti ili koristite korutine/asinhrone.

Primjer 2: Pristup bazi podataka u UI niti

Ista stvar se dešava ako pristupite SQLite-u ili nekoj drugoj bazi podataka bez "odvajanja" operacije od glavne niti. Koristite komponente poput Room, koje su dizajnirane za asinhroni rad, i delegirajte teški posao sa niti interfejsa.

Primjer 3: Korištenje sporog BroadcastReceiver-a

Ako imate prijemnik događaja koji pokreće dugotrajne zadatke (kao što su preuzimanje datoteka, obrada podataka itd.) u svojoj metodi onReceive(), blokirat ćete glavnu nit. Premjestite te zadatke u pozadinsku uslugu ili koristite goAsync() i uvijek završite sa PendingResult.finish() kako biste izbjegli blokade.

Primjer 4: Zasićenost radnog konca

Ako imate namjenski skup niti, ali su sve one zauzete dugotrajnim zadacima, a glavna nit čeka da se jedna oslobodi, možete uzrokovati zastoje. Pazite da vaši skupovi niti nisu zasićeni i, ako je potrebno, proširite ili odvojite skupove za različite zadatke..

Kako korak po korak otkloniti greške i riješiti ANR

Kada se suočite s ANR-om, koraci za otklanjanje grešaka su obično sljedeći:

  1. Analizirajte trag steka koje pruža Google Play konzola, Firebase Crashlytics ili bilo koji alat koji koristite. Pronađite blokiranu funkciju ili komponentu.
  2. Reproduciraj grešku u kontroliranom okruženju: simulirajte spore mrežne uvjete, veliko opterećenje ili uvedite umjetna kašnjenja kako biste potvrdili porijeklo.
  3. Pregledajte uključeni kodPotražite spore operacije, zauzeta čekanja ili zaključavanja resursa.
  4. Odvojite duge zadatke od glavne nitiKoristite nove niti, korutine ili pozadinske servise.
  5. Poboljšava performanse upita i operacija koji usporavaju aplikaciju.
  6. Testirajte na različitim uređajima i verzije, jer se performanse mogu uveliko razlikovati između modela i proizvođača.
Platforme za kreiranje Android aplikacija bez programiranja-4
Vezani članak:
Najbolje besplatne igre trčanja i skakanja za Android: kompletan i ažurirani vodič