Cum de a rezolva 13 cele mai frecvente mesaje de eroare de la Android

Testarea este o parte esențială a dezvoltării Android, permițându-vă să eliminați toate bug-urile, erorile și problemele de performanță care ar putea fi ascunse în aplicația dvs., înainte de ao dezlănțui publicului larg.

De fiecare dată când întâlniți o eroare, Android generează un mesaj de eroare și apoi afișează mesajul respectiv ca parte a aplicației Android Studio Logcat Monitor sau ca un dialog pe dispozitivul pe care îl utilizați pentru a testa aplicația.

Aceste mesaje de eroare sunt, de obicei, scurte și la un punct și, la prima vedere, nu pot părea toate de ajutor. Cu toate acestea, aceste mesaje conțin de fapt toate informațiile de care aveți nevoie pentru a vă aduce înapoi proiectul - trebuie doar să știți cum să le descifrați!

În acest articol, vom examina în profunzime cele 13 mesaje de eroare cu care vă întâlniți cel mai probabil atunci când vă dezvoltați orice Aplicația Android. Vom examina ceea ce fiecare dintre aceste mesaje de eroare într-adevăr înseamnă examinarea tuturor posibilelor motive pentru care s-ar putea întâlni fiecare eroare și, cel mai important, împărtășirea instrucțiunilor pas cu pas despre cum le puteți rezolva.  

Recunoașterea mesajelor de eroare

Există o gamă largă de mesaje de eroare pe care le puteți întâlni atunci când testați aplicația dvs., variind de la erori grave care vor cauza ca aplicația dvs. să prăbușească prima dată când încercați să o instalați pe un dispozitiv destinație la erori mai subtile care degradează performanța aplicației în timp.

În funcție de genul de eroare pe care îl întâlniți, Android va afișa mesajul de eroare fie pe dispozitivul pe care îl utilizați pentru a testa aplicația, fie în Android Studio.

Spotarea mesajelor de eroare care apar pe un dispozitiv fizic sau AVD este ușoară - trebuie doar să fiți atenți la orice dialog care apare pe ecranul dispozitivului dvs.! Cu toate acestea, erorile de detectare care apar în Android Studio pot fi complicate, deoarece monitorul Logcat înregistrează o cantitate imensă de informații, ceea ce face ușor să ratezi mesaje importante de eroare. 

Cea mai ușoară modalitate de a vă asigura că nu pierdeți niciun mesaj de eroare este să deschideți aplicația Logcat Monitor prolix dropdown și setați-l la Eroare, care va filtra totul, cu excepția mesajelor de eroare.


1. Rezolvarea nu poate fi găsită / nu se poate rezolva simbolul R

Această eroare este cauzată atunci când aplicația Android Studio nu vă poate genera R.java fișierul este corect și poate ajunge adesea de nicăieri - un minut totul va funcționa bine și în minutul următor fiecare parte a proiectului dvs. nu reușește să compileze. Pentru a face lucrurile să se înrăutățească, atunci când se întâlnește Android Studio R.layout eroare, va semnala, de obicei, că toate fișierele cu resurse de dispunere conțin erori, ceea ce face dificilă cunoașterea de unde să căutați sursa erorii.

Adesea, soluția cea mai eficientă este cea mai simplă: curățați-vă și reconstruiți-vă proiectul. Selectați Construiți> Proiectul curat din bara de instrumente Android Studio, așteptați câteva momente, apoi construiți-vă proiectul selectând Build> Rebuild Project.

Dacă un singur ciclu curat / reconstruit nu funcționează, încercați să repetați acest proces de câteva ori, deoarece unii dezvoltatori au raportat rezultate pozitive după ce au terminat mai multe cicluri de curățare / reconstruire în succesiune rapidă.

Dacă întâmpinați această eroare după mutarea unor fișiere și directoare în jur, atunci este posibil ca R.layout eroarea este cauzată de o nepotrivire între memoria cache a aplicației Android Studio și aspectul actual al proiectului. Dacă bănuiți că este posibil, selectați File> Invalidate Caches / Restart> Invalidate și Restart din bara de instrumente Android Studio.

Probleme cu numele resurselor dvs. pot, de asemenea, împiedica R.java fișierul a fost creat corect, deci verificați dacă nu aveți mai multe resurse cu același nume și niciunul dintre numele fișierelor dvs. nu conține caractere nevalide. Sistemul Android Studio acceptă numai minuscule a-z, 0-9, opriri complete și subliniere, iar un singur caracter nevalid poate provoca o R.layout eroare în întregul dvs. proiect, chiar dacă nu de fapt utilizare această resursă oriunde în proiect!

Dacă identificați și rezolvați o eroare, dar Android Studio afișează în continuare R.layout , este posibil să fie necesar să finalizați un ciclu curat / reconstruit înainte ca Android Studio să vă înregistreze corect modificările.

2. Prea multe referințe la câmp ... Max este 65,536

Când compilați aplicația, fișierul APK conține fișiere bytecode executabile sub forma fișierelor de bytecode Dalvik Executable (DEX). Specificația DEX afirmă că un singur fișier DEX poate face referire la maximum 65.536 de metode și dacă întâlniți Prea multe domenii ... eroare atunci înseamnă că aplicația dvs. a depășit această limită. Rețineți că aceasta este o limitare a numărului de metode de proiect referințe, și nu numărul de metode ale proiectului dvs. definește.

Dacă întâmpinați această eroare, puteți:  

  • Reduceți numărul referințelor din proiect. Una dintre modalitățile cele mai eficiente de a tăia referințele dvs. de metode este să examinați dependențele aplicației dvs., deoarece acestea sunt adesea unul dintre cei mai mari contribuabili ai referințelor de metode.
  • Configurați aplicația să utilizeze mai mult de un fișier DEX, activând multidex.

Procesul de activare a suportului multidex va varia în funcție de versiunile Android acceptate de proiect.

Dacă vizați versiunea Android 5.0 sau o versiune ulterioară, primul pas este să deschideți fișierul și setările de nivel de construcție la nivel de modul multiDexEnabled la Adevărat:

android defaultConfig minSdkVersion 21 multiDexEnabled true

Cu toate acestea, dacă dvs. minSdkVersion este de 20 sau mai mic, atunci va trebui să adăugați multiDexEnabled true atributul și apoi adăugați biblioteca suport multidex ca dependență de proiect:

dependencies compile 'com.android.support:multidex:1.0.1'

Următorul pas depinde de faptul dacă aveți sau nu o problemă cerere clasă.

Dacă proiectul tău are prioritate cerere , apoi deschideți Manifestul și adăugați următoarele la etichetă:

... 

Dacă proiectul dvs. nu are prioritate cerere clasa, atunci va trebui să se extindă MultiDexApplication in schimb:

clasa publica MyApplication extinde MultiDexApplication

În cele din urmă, dacă o suprascrieți cerere dar nu poate schimba clasa de bază, atunci puteți activa multidex prin suprascrierea attachBaseContext () metodă și chemare MultiDex.install (aceasta), de exemplu:

@Override protejată void attachBaseContext (baza de context) super.attachBaseContext (bază); MultiDex.install (aceasta); 

3. Alegeți un director JDK valabil

Dacă primiți o eroare JDK de fiecare dată când încercați să vă construiți aplicația, înseamnă că Android Studio se străduiește să găsească locul în care este instalat JDK pe calculatorul dvs. de dezvoltare.

Pentru a remedia această eroare:

  • Selectați Fișier> Structura proiectului ... din bara de instrumente Android Studio.
  • Selectați Locația SDK din meniul din stânga.
  • Asigurați-vă că Utilizați JDK încorporat este selectată caseta de selectare.

Dacă acest lucru nu rezolvă problema, navigați înapoi la Fișier> Structura proiectului ...> Locația SDK, și introduceți manual calea completă a fișierului pentru JDK. Dacă nu sunteți sigur unde este instalat JDK pe calculatorul dvs. de dezvoltare, atunci puteți afla dacă deschideți Terminalul (Mac) sau Command Prompt (Windows) și introduceți următoarea comandă:

/ Usr / libexec / JAVA_HOME

4. Eroare la instalarea APK

În timp ce AVD-urile sunt excelente pentru testarea aplicației dvs. într-o gamă largă de hardware și software diferite, trebuie să vă testați întotdeauna aplicația pe cel puțin un telefon sau tabletă Android fizică. Cu toate acestea, abilitatea Android Studio de a recunoaște un dispozitiv Android conectat este notoriu lovit și dor.

Dacă ați atașat dispozitivul la mașina dvs. de dezvoltare, dar întâlniți un dispozitiv Eroare la instalarea APK mesaj ori de câte ori încercați să instalați fișierul APK sau dispozitivul dvs. nu apare nici măcar în Selectați Ținta de implementare fereastră, încercați următoarele remedii:

Verificați debugging-ul USB este activat. 

Deschideți dispozitivul Setări, apoi selectați Opțiuni pentru dezvoltatori, și asigurați-vă Depanare USB este activat. Dacă nu vedeți Opțiuni pentru dezvoltatori în Setări meniu, apoi selectați Despre telefon și continuați să atingeți Construiți numărul până la Acum sunteți dezvoltator apare o notificare. Reveniți la principalele Setări ecran, și ar trebui să găsiți asta Opțiuni pentru dezvoltatori a fost adaugat.

Verificați ecranul smartphone-ului sau al tabletei. 

Uneori, dispozitivul dvs. poate necesita o intrare suplimentară înainte ca acesta să se conecteze la mașina dvs. de dezvoltare. De exemplu, este posibil să vă solicitați să alegeți între diferite moduri sau să autorizați în mod explicit conexiunea.

Asigurați-vă că ați instalat driverul USB corect. 

Dacă dezvoltați pe Windows, va trebui să descărcați driverul corespunzător OEM USB pentru dispozitivul dvs. Dacă sunteți utilizator Nexus, puteți descărca Google USB conducătorul auto prin SDK Manager Android Studio.

Verificați dacă dispozitivul dvs. respectă cerințele SDK minime ale proiectului. 

Veți găsi SDK-ul minim al proiectului în fișierul gradle.build la nivel de modul și puteți verifica ce versiune de Android este instalată pe dispozitiv prin deschiderea Setări și trecerea la Despre telefon secțiune.

Încercați să reporniți procesul dvs. adb (Debug Bridge). 

Deschideți o fereastră Terminal sau Command Prompt și apoi schimbați directorul (CD), așa că arată spre tine platformă-unelte fereastră, de exemplu:

cd / Utilizatori / Descărcări / adt-bundle-mac / sdk / platform-tools

Apoi, terminați și reporniți procesul adb introducând următoarele comenzi una după alta:

./ adb kill-server
./ adb start-server

Reporniți totul! 

Dacă totul eșuează, încercați să deconectați și să reconectați dispozitivul, reporniți dispozitivul, reporniți aplicația Android Studio și, ca o ultimă soluție absolută, reporniți mașina de dezvoltare.

5. INSTALL_FAILED_INSUFFICIENT_STORAGE

Dacă întâmpinați această eroare când încercați să instalați proiectul, înseamnă că dispozitivul destinație nu are suficientă memorie.

Dacă încercați să instalați proiectul pe un AVD, trebuie să verificați cât spațiu ați alocat AVD-ul respectiv:

  • Lansați AVD Manager.
  • Găsiți AVD-ul în cauză și faceți clic pe el însoțitor Editați acest AVD icoană.
  • În fereastra care apare, faceți clic pe Arata setarile avansate.
  • Defilați la Memorie și stocare secțiune.

Această secțiune listează diferitele tipuri de memorie pe care le-ați alocat acestui AVD. Dacă oricare dintre aceste valori este neobișnuit de scăzută, atunci ar trebui să le creșteți pentru a reflecta mai îndeaproape memoria disponibilă pentru smartphone-ul sau tableta Android tipic:

  • Berbec. Cantitatea de RAM disponibilă pentru dispozitivul emulat.
  • VM Heap. Cât spațiu de heap (adică memorie) este alocat Virtual Machine (VM) al smartphone-ului sau tabletei emulate.
  • Stocare internă. Cantitatea de memorie nedemontabilă disponibilă pentru dispozitivul emulat.
  • card SD. Cantitatea de memorie detașabilă disponibilă. Dacă doriți să utilizați un card SD virtual gestionat de Android Studio, selectați -Studio gestionate și introduceți dimensiunea cardului SD virtual pe care doriți să-l creați (valoarea minimă recomandată este de 100 MB). Alternativ, puteți gestiona "spațiul" cardului SD într-un fișier, selectând Fișier extern și apoi specificați locația pe care doriți să o utilizați.

Dacă nu există nimic ciudat în legătură cu memoria AVD sau dacă încercați să instalați aplicația pe un telefon sau tabletă Android fizic fizic, atunci această eroare înseamnă că aplicația dvs. compilată este pur și simplu prea mare. O aplicație care ia o mușcătură semnificativă din memoria dispozitivului la timpul de instalare nu va merge niciodată bine. 

Dacă aveți nevoie să reduceți dramatic dimensiunea fișierului APK, încercați următoarele tehnici: 

  • Utilizați ProGuard pentru a elimina clasele, câmpurile, metodele și atributele neutilizate. Pentru a activa ProGuard, deschideți fișierul build.grade la nivel de modul și adăugați următoarele:

buildTypes release // Enable ProGuard // minifyEnabled true // Deoarece vrem să reducem cât mai mult dimensiunea APK, folosesc setările din fișierul proguard-android-optimize.txt // proguardFiles getDefaultProguardFile ('proguard -android-optimize.txt '),' proguard-rules.pro '
  • Utilizați instrumentul aapt pentru optimizarea desenelor cu compresie fără pierderi sau utilizați un program proiectat pentru a reduce dimensiunea fișierelor PNG (zopflipng, pngcrush, OptiPNG, TinyPNG sau pngquant) sau dimensiunea pachetelor JPEG (packJPG). Alternativ, vă recomandăm să încercați să înlocuiți fișierele PNG și JPEG cu imagini în formatul WebP.
  • Nu uitați să eliminați toate funcționalitățile legate de depanare din versiunea lansată a aplicației dvs. Android nu are nevoie de această informație pentru a rula, așa că doar ocupă spațiu inutil.
  • Curățați-vă proiectul pentru resursele duplicate. Chiar și resursele ușoare, cum ar fi corzile duplicat, contribuie la dimensiunea finală a fișierului dvs. APK.
  • Utilizați Lint pentru a identifica orice resurse care nu sunt menționate oriunde în codul dvs. și eliminați aceste resurse. Pentru a rula Lint, selectați Analizați> Inspectați codul ... din bara de instrumente Android Studio.
  • Activați scăderea resurselor, adăugând shrinkResources true la fișierul build.grade al proiectului.
  • Dacă trebuie să utilizați variante ale aceleiași imagini, utilizați aceeași imagine de bază și personalizați-o la timpul de execuție, în loc să adăugați mai multe versiuni ale aceleiași imagini la proiectul dvs. De exemplu, puteți utiliza diferite culori unei imagini utilizând Android: tentă și tintMode, și puteți roti o imagine utilizând android: fromDegrees, android: toDegrees, Android: pivotX, și Android: pivotY.
  • Optimizați-vă bibliotecile. Încercați să eliminați orice biblioteci inutile sau cu memorie intensivă din proiectul dvs. Dacă aveți nevoie să utilizați o bibliotecă mare, verificați dacă există o modalitate prin care puteți optimiza această bibliotecă pentru mediul mobil, deoarece codul bibliotecii externe nu este adesea scris în memoria mobilă. Ar trebui să rețineți, de asemenea, că multe biblioteci conțin o cantitate mare de șiruri localizate. Dacă aplicația dvs. nu acceptă în mod oficial aceste biblioteci, atunci este posibil să reduceți mărimea bibliotecii informând Gradle să nu includă aceste șiruri în APK-ul dvs. compilat. Pentru a specifica limbile pe care aplicația dvs. acceptă oficial, deschideți fișierul build.gradle la nivel de modul și utilizați resConfigs atribut. De exemplu, aici specificăm că vrem să includem în proiectul nostru numai șiruri de limbă engleză:

android implicitConfig resConfigs "en"
  • Luați în considerare faptul că fișierul dvs. APK conține o cantitate mare de conținut pe care utilizatorul individual le poate descărca, dar nu îl folosește niciodată. De exemplu, un dispozitiv cu un ecran hdpi nu are prea mult de utilizat xxxhdpi active! Una dintre modalitățile cele mai eficiente de reducere a dimensiunii fișierului APK este să-l separați în mai multe fișiere APK, astfel că atunci când utilizatorul își descarcă aplicația, acesta va primi un fișier APK care conține doar codul și resursele care au sens pentru dispozitivul respectiv. Veți găsi mai multe informații despre crearea de fișiere APK care vizează diferite densități ale ecranului și interfețe binare specifice aplicațiilor (ABI) specifice la documentele oficiale Android.

6. ActivityNotFoundException

Un ActivityNotFoundException apare atunci când este apelat la startActivity (Intentie) sau una dintre variantele sale nu reușește deoarece Activitate nu poate executa data scop.

Cea mai frecventă cauză a unui ActivityNotFoundException uită să declare o activitate în manifestarea dvs., deschideți manifestarea dvs. și verificați-vă că ați declarat toate activitățile. De asemenea, trebuie să verificați dacă ați declarat fiecare activitate corect, utilizând fie un nume de clasă complet calificat, fie o oprire completă ca o scurtă descriere a numelui pachetului. De exemplu, ambele dintre următoarele sunt valide:

Dacă nu puteți observa probleme cu manifestarea dvs., atunci există câteva alte cauze potențiale ActivityNotFoundExceptions. În primul rând, dacă întâmpinați această eroare după mutarea unui Activitate clasa de la un pachet la altul, atunci este posibil ca ați confundat Android Studio și trebuie doar să vă curățați și reconstruiți proiectul.

Un ActivityNotFoundException poate fi cauzată și în cazul unei erori în țintă Activitate nu se încarcă corect. Pentru a verifica dacă acest lucru se întâmplă în proiectul dvs., puneți codul de intenție în interiorul unui bloc de încercare:

încercați // Codul dvs. aici // captură (ActivityNotFoundException e) e.printStackTrace (); 

Rulați aplicația din nou și apoi aruncați o privire la Logcat Monitor Android Studio pentru a vedea dacă au fost capturate excepții care ar putea împiedica crearea unei activități țintă. Dacă este cazul, atunci rezolvarea acestor erori ar trebui să rezolve problema ActivityNotFoundException, de asemenea.

7. ClassCastException

ClassCastException eroarea este legată de caracteristica de conversie de tip Java, care vă permite să distribuiți variabile de la un tip la altul. Vă întâlniți a ClassCastException când încercați să aruncați un obiect într-o clasă a cărei instanță nu este. De exemplu, ambele fragmente de cod de mai jos vor avea ca rezultat: a ClassCastException:

Obiect x = Integer nou (0); System.out.println ((String) x);
ImageView imagine = (ImageView) context.findViewById (R.id.button);

Acest mesaj de eroare conține informații despre linia care cauzează ClassCastException eroare, navigați astfel la această parte a proiectului, verificați ce obiecte sunt distribuite acolo și rezolvați orice nepotrivire.

Dacă nu puteți observa o problemă cu casting-ul dvs., atunci luați în considerare dacă ați mutat recent unele Vizualizări în jurul fișierelor de resurse de configurare, după cum unii utilizatori au raportat că întâlnesc a ClassCastException după rearanjarea lor Vizualizări. Dacă bănuiți că acest lucru poate fi cauza dvs. ClassCastException, apoi spuneți Studio Android să vă regenereze fișierele de aspect de la zero, efectuând un ciclu curat / reconstruit. Acest lucru îi obligă pe Android Studio să înregistreze în mod corespunzător modificările recente ale aspectului, care ar trebui să vă rezolve problema ClassCastException.

8. NullPointerException

În Java, atunci când declarați o variabilă de referință, de fapt, creați un pointer la un obiect. Puteți declara că un obiect îndreptată în prezent către o piesă de date necunoscută atribuind o valoare nulă referinței obiectului respectiv. Valorile nula pot fi utile în codarea unor modele de design, dar dacă întâlniți un NullPointerException (NPE), înseamnă că ați încercat să folosiți o referință care indică o valoare nulă, ca și cum ar fi fost un referință pentru un obiect. Deoarece nu există niciun cod de execuție în locația în care se îndreaptă această referință, ați terminat cu un NPE.

Un NPE este, de obicei, însoțit de informații despre unde a fost capturată această excepție, astfel încât monitorul Logcat trebuie să conțină linia exactă în care a apărut această eroare. Navigați la această zonă a proiectului dvs. și identificați referința care este egală cu nul. Apoi, va trebui să găsiți locația în care trebuie setată valoarea și setați-o.

findViewById metoda poate reveni, de asemenea, null în cazul în care solicitată Vedere nu poate fi găsit, deci dacă NPE dvs. apare într-o linie care conține a findViewById, verificați dacă ați inițializat aspectul care conține acest lucru Vedere. De asemenea, fiți în căutarea oricărei greșeli de scriere sau a greșelilor care s-ar putea să fi intrat în dvs. findViewById apel, deoarece acestea pot avea ca rezultat și un NPE.  

Pentru a evita apariția NPE în proiectul dvs., asigurați-vă că toate obiectele sunt inițializate înainte de a încerca să le utilizați și întotdeauna verificați dacă o variabilă nu este nulă înainte de a cere o metodă sau un câmp de la acel obiect.

9. Aplicația nu răspunde la eroare

Aceasta este o eroare care apare ca un dialog pe dispozitivul Android sau AVD pe care îl utilizați pentru a testa aplicația. Aplicația nu răspunde (ANR) apare atunci când UI-ul aplicației se blochează și nu răspunde la intrarea utilizatorului timp de mai mult de cinci secunde. Acest lucru se întâmplă de obicei deoarece aplicația dvs. încearcă să efectueze operații de lungă durată sau intensivă pe firul principal de interfață cu Android.

În Android, firul principal al UI este responsabil pentru expedierea tuturor evenimentelor de intrare ale utilizatorilor la widget-urile UI corespunzătoare și pentru actualizarea interfeței UI a aplicației. Cu toate acestea, acest thread poate procesa doar o singură sarcină la un moment dat, deci dacă blocați firul principal cu operațiuni de lungă durată sau intensivă, interfața dvs. UI va fi complet inactivă până când această activitate nu este finalizată.

Dacă întâlniți un mesaj ANR în timp ce testați aplicația, atunci tu categoric trebuie să aruncați o privire asupra muncii pe care o realizați pe firul principal. Cu toate acestea, dacă nu întâlniți în mod explicit această eroare, dar observați că uneori uneori vă simțiți lent sau lent, este indicat faptul că sunteți pe punctul de a găsi o eroare ANR și, din nou, ar trebui să aruncați o privire la starea din thread-ul dvs. de utilizator.

Pentru a rezolva erorile ANR (și lângă-Erorile ANR), trebuie să identificați toate operațiunile care au potențialul de a alerga încet sau care necesită o putere de procesare semnificativă și apoi să le mutați de pe firul principal. Faceți acest lucru creând un fir de lucrător în cazul în care aceste operațiuni pot fi efectuate cu zero risc de blocare a firului principal de interfață.

Există mai multe metode de creare de fire suplimentare, dar cea mai simplă soluție este de a utiliza un AsynTask, deoarece această clasă conține deja propriul fir de lucru și un onPostExecute () apel invers pe care îl puteți utiliza pentru a comunica cu firul principal de interfață cu Android.

Cu toate acestea, AsyncTasks sunt mai potrivite pentru a efectua operațiuni de fundal scurte, deci dacă aveți nevoie să efectuați o operațiune de lungă durată, atunci ar trebui să utilizați Serviciu sau an IntentService in schimb.

Deși deplasarea sarcinilor lungi și intense de pe firul principal va avea cel mai mare impact asupra performanței aplicației dvs., este cea mai bună practică să efectuați cât mai puține lucruri pe firul principal al UI. Chiar și o cantitate mică de cod inutil pe firul principal poate avea un impact asupra receptivității aplicației dvs. Deci, odată ce ați relocat cu succes toate operațiile de lungă durată și de intensitate, ar trebui să analizați dacă există mai mult cod pe care îl puteți îndepărtați firul principal.

10. Numai fila originală care a creat o ierarhie de vizualizare poate atinge viziunea sa

În Android, vă puteți actualiza interfața utilizator numai din firul principal. Dacă încercați să accesați elementele UI din orice alt fir, atunci veți întâlni această eroare.

Pentru a rezolva această problemă, identificați partea din sarcina dvs. de fundal care încearcă să actualizeze interfața de utilizare și să o mute la un runOnUiThread, de exemplu:

runOnUiThread (nou Runnable () @Override public void run () // Actualizați-vă UI //);

Alternativ, puteți utiliza un manipulator sau puteți efectua lucrul de fundal într-un AsyncTask, deoarece puteți comunica cu firul principal folosind AsyncTask's onPostExecute () metoda de retur. În cele din urmă, dacă te găsești în mod regulat trecerea între fire, atunci poate vrei să te uiți în RxAndroid, deoarece această bibliotecă îți permite să creezi un fir nou, să programezi o lucrare care să fie efectuată pe acest thread și apoi să postezi rezultatele în firul principal, toate cu doar câteva linii de cod.

11. NetworkOnMainThreadException

Această excepție este aruncată atunci când aplicația dvs. încearcă să efectueze operațiuni de rețea în firul principal, cum ar fi trimiterea de solicitări API, conectarea la o bază de date la distanță sau descărcarea unui fișier. Deoarece operațiunile de rețea pot fi consumatoare de timp și cu o forță de muncă intensă, este foarte probabil ca acestea să blocheze firul principal, astfel încât Android 3.0 (Honeycomb) și mai sus vor arunca această eroare ori de câte ori încercați să faceți o solicitare de rețea pe firul principal.

Dacă întâlniți a NetworkOnMainThreadException, apoi găsiți codul de rețea care rulează pe firul dvs. principal și mutați-l într-un fir separat.

Dacă aveți nevoie să faceți solicitări frecvente de rețea, atunci vă recomandăm să aruncați o privire la Volley, o bibliotecă HTTP care inițiază propriile fire de fundal, astfel încât toate solicitările de rețea să fie executate din firul principal în mod implicit.

12. Activitatea a scurs fereastra care a fost adăugată inițial aici

Această eroare apare când încercați să afișați un dialog după ce ați părăsit activitatea. Dacă întâmpinați această problemă, deschideți Activitatea și asigurați-vă că respingeți corect dialogul, sunând respingerea () în activitățile fiecărei activități onDestroy () sau onPause () metoda, de exemplu:

@Override protejate void onDestroy () super.onDestroy (); dacă (pDialogue! = null) pDialogue.dismiss (); 

13. OutofMemoryError

Această eroare apare atunci când aplicația dvs. face o cerere de memorie pe care sistemul nu o poate îndeplini. Dacă întâmpinați acest mesaj de eroare, începeți prin a exclude toate cele mai frecvente greșeli de gestionare a memoriei. Verificați că v-ați amintit că vă dezarhivați toate receptoarele de difuzare și că v-ați oprit toate serviciile; asigurați-vă că nu țineți referințe în variantele statice ale membrilor și că nu încercați să încărcați niciun bitmap mare.

Dacă ați exclus toate cauzele evidente OutOfMemoryError, atunci va trebui să vă grăbiți mai adânc și să examinați exact modul în care aplicația dvs. alocă memorie, deoarece există șanse să existe câteva zone în care puteți îmbunătăți gestionarea memoriei aplicației.

Android Studio are o întreagă zonă dedicată pentru a vă ajuta să analizați utilizarea memoriei aplicației, deci începeți prin selectarea Vizualizați> Fereastră de instrumente din bara de instrumente Android Studio. În acest moment veți vedea fie una Android Monitor sau Android Profiler , în funcție de versiunea de Android Studio pe care ați instalat-o.

Am discutat mai înainte despre lucrul cu monitorul de memorie de pe acest site, dar din moment ce Android Profiler este o nouă adăugire la Android Studio, să examinăm rapid caracteristicile sale majore.

Când deschideți Profiler Android, acesta începe să înregistreze automat trei informații.

Deoarece suntem interesați de modul în care aplicația noastră folosește memoria, dați-i Memorie secțiune un clic, care va lansa Memory Profiler.

Profilul de memorie constă dintr-o cronologie care afișează diferitele tipuri de memorie care sunt alocate în prezent de aplicația dvs., de exemplu Java, nativ, și grămadă. Deasupra acestui grafic veți găsi un șir de pictograme pe care le puteți utiliza pentru a declanșa diferite acțiuni:

  • Forțați un eveniment de colectare a gunoiului.
  • Luați un instantaneu Hprof al memoriei aplicației. Acesta este un instantaneu al tuturor obiectelor din mulțimea aplicației dvs., inclusiv tipul de obiecte pe care aplicația dvs. le alocă, numărul de obiecte alocate și cantitatea de spațiu pe care aceste obiecte o ocupă.
  • Înregistrați alocările de memorie. Prin înregistrarea alocărilor de memorie ale aplicației în timp ce efectuați anumite acțiuni, puteți identifica operațiile specifice care consumă prea multă memorie.

Pentru a identifica părțile din aplicația dvs. care sunt responsabile pentru OutOfMemoryError, petreceți ceva timp interacționând cu aplicația dvs. și monitorizați modul în care alocările de memorie ale aplicației se modifică ca răspuns la diferite acțiuni. Odată ce ați identificat secțiunea din proiectul dvs. care cauzează problema, petreceți ceva timp examinându-l pentru eventualele scurgeri de memorie, precum și orice ineficiență în modul în care utilizează memoria.

Concluzie

În acest articol, am analizat 13 dintre mesajele de eroare cu care sunteți cel mai probabil să întâlniți când dezvoltați Android. Am discutat toți diferiții factori care pot contribui la aceste erori și pașii pe care trebuie să îi faceți pentru a le rezolva.

Dacă sunteți afectat de un mesaj de eroare pe care nu l-am acoperit, primul dvs. pas ar trebui să fie copierea / lipirea întregului mesaj de eroare în Google, deoarece acest lucru va genera de multe ori fire și postări de blog unde oamenii discută cum să rezolve această eroare specială.

Și dacă nu găsiți o soluție oriunde pe web, puteți oricând să contactați comunitatea Android pentru ajutor direct, trimițând întreb

Cod