Hoe de 13 meest voorkomende foutmeldingen van Android op te lossen

Testen is een cruciaal onderdeel van de Android-ontwikkeling, zodat u alle bugs, fouten en prestatieproblemen die zich in uw app op de loer bevinden, kunt gladstrijken voordat u deze openbaar maakt voor het grote publiek.

Telkens wanneer u een fout tegenkomt, genereert Android een foutbericht en geeft dat bericht vervolgens weer als onderdeel van Android Studio's Logcat Monitor of als een dialoog op het apparaat dat u gebruikt om uw app te testen.

Deze foutmeldingen zijn meestal kort en to the point, en op het eerste gezicht lijkt dit misschien niet zo nuttig. Deze berichten bevatten echter eigenlijk alle informatie die u nodig hebt om uw project weer op het goede spoor te krijgen - u hoeft alleen maar te weten hoe u ze kunt ontcijferen!

In dit artikel gaan we dieper in op de 13 foutmeldingen die u waarschijnlijk tegenkomt bij het ontwikkelen ieder Android-app. We zullen onderzoeken wat elk van deze foutmeldingen is werkelijk betekent, onderzoekt alle mogelijke redenen waarom u elke fout zou tegenkomen en, belangrijker nog, het delen van stap-voor-stap instructies over hoe u ze kunt oplossen.  

Foutmeldingen zoeken

Er is een breed scala aan foutmeldingen die u kunt tegenkomen bij het testen van uw app, variërend van ernstige fouten waardoor uw app de eerste keer dat u het op een doelapparaat probeert te installeren, crasht tot meer subtiele fouten die de prestaties van uw toepassing in de loop van de tijd verminderen.

Afhankelijk van het soort fout dat u tegenkomt, geeft Android het foutbericht weer op het apparaat dat u gebruikt om uw app te testen of in Android Studio.

Spotting-foutmeldingen die op een fysiek apparaat of AVD verschijnen, zijn eenvoudig: u hoeft alleen maar te letten op eventuele dialogen die op het scherm van uw apparaat verschijnen! Spotting errors die verschijnen in Android Studio kunnen echter lastig zijn, omdat de Logcat Monitor een enorme hoeveelheid informatie opslaat, waardoor het gemakkelijk is om belangrijke foutmeldingen te missen.. 

De eenvoudigste manier om ervoor te zorgen dat u geen foutmeldingen mist, is om Logcat Monitor's te openen breedsprakig dropdown en zet het op Fout, die alles zal filteren behalve foutmeldingen.


1. R.layout.main kan niet worden gevonden / kan symbool R niet oplossen

Deze fout wordt veroorzaakt wanneer Android Studio uw account niet kan genereren R.java bestand correct, en het kan vaak uit het niets opduiken-een minuut alles zal goed werken, en de volgende minuut is elk onderdeel van uw project niet te compileren. Tot overmaat van ramp, wanneer Android Studio de R.layout fout, zal het meestal al uw lay-outresourcebestanden markeren als fouten bevatten, wat het moeilijk maakt om te weten waar te beginnen met het zoeken naar de bron van de fout.

Vaak is de meest effectieve oplossing de eenvoudigste: maak uw project schoon en herbouw. kiezen Bouw> Clean Project van de Android Studio-werkbalk, wacht even en bouw vervolgens uw project door te selecteren Build> Rebuild Project.

Als een enkele clean / rebuild-cyclus niet werkt, probeer dan dit proces een paar keer te herhalen, omdat sommige ontwikkelaars positieve resultaten hebben gerapporteerd na het snel achter elkaar uitvoeren van meerdere clean / rebuild-cycli.

Als u deze fout tegenkomt nadat u enkele bestanden en mappen hebt verplaatst, is het mogelijk dat de R.layout fout wordt veroorzaakt door een mismatch tussen de cache van Android Studio en de huidige lay-out van uw project. Als u vermoedt dat dit het geval is, selecteert u Bestand> Caches ongeldig / Opnieuw opstarten> Ongeldig en opnieuw opstarten van de werkbalk van Android Studio.

Problemen met de namen van uw bronnen kunnen ook voorkomen dat R.java bestand van correct wordt gemaakt, dus controleer of u niet meerdere bronnen met dezelfde naam hebt en dat geen van uw bestandsnamen ongeldige tekens bevat. Android Studio ondersteunt alleen kleine letters a-z, 0-9, punt- en onderstrepingstekens en één ongeldig teken kan een R.layout fout in uw hele project, zelfs als u dit niet daadwerkelijk doet gebruik deze bron overal in uw project!

Als u een fout identificeert en oplost, maar Android Studio nog steeds de R.layout fout, dan moet je mogelijk een clean / rebuild-cyclus voltooien voordat Android Studio je wijzigingen correct registreert.

2. Too Many Field References ... .Max is 65.536

Wanneer u uw app compileert, bevat de APK uitvoerbare bytecode-bestanden in de vorm van bytecode-bestanden van Dalvik Executable (DEX). De DEX-specificatie stelt dat een enkel DEX-bestand kan verwijzen naar een maximum van 65.536 methoden, en als u de Te veel velden ... fout dan betekent dit dat uw app deze limiet heeft overschreden. Merk op dat dit een beperking is van het aantal methoden van uw project referenties, en niet het aantal methoden van je project definieert.

Als u deze fout tegenkomt, kunt u:  

  • Verminder het aantal verwijzingen in uw project. Een van de meest effectieve manieren om uw methodeverwijzingen in orde te maken, is om de afhankelijkheden van uw applicatie te beoordelen, omdat deze vaak een van de grootste bijdragers zijn aan methodeverwijzingen.
  • Configureer uw app om meer dan één DEX-bestand te gebruiken, door multidex in te schakelen.

Het proces voor het inschakelen van multidex-ondersteuning is afhankelijk van de versies van Android die door uw project worden ondersteund.

Als u Android 5.0 of hoger target, is de eerste stap het openen van uw build.zwendelbestand en instelling op moduleniveau multiDexEnabled naar waar:

android defaultConfig minSdkVersion 21 multiDexEnabled true

Echter, als uw minSdkVersion is 20 of lager, dan moet je het toevoegen multiDexEnabled true attribuut en voeg vervolgens de ondersteuningsbibliotheek van multidex toe als projectafhankelijkheid:

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

De volgende stap hangt af van het feit of u de waarde overschrijft of niet Toepassing klasse.

Als uw project de Toepassing klasse, open vervolgens je Manifest en voeg het volgende toe aan de label:

... 

Als uw project de. Niet overschrijft Toepassing klas, dan moet je uitbreiden MultiDexApplication in plaats daarvan:

public class MyApplication breidt MultiDexApplication uit

Ten slotte, als u de Toepassing klasse, maar kan de basisklasse niet wijzigen, dan kunt u multidex inschakelen door de waarde te overschrijven attachBaseContext () methode en bellen MultiDex.install (de), bijvoorbeeld:

@Override beschermde ongeldige attachBaseContext (Context base) super.attachBaseContext (base); MultiDex.install (deze); 

3. Kies een geldige JDK-directory

Als u een JDK-fout krijgt wanneer u uw app probeert te bouwen, betekent dit dat Android Studio moeite heeft om te vinden waar de JDK is geïnstalleerd op uw ontwikkelmachine.

Om deze fout te herstellen:

  • kiezen Bestand> Projectstructuur ... van de Android Studio-werkbalk.
  • kiezen SDK-locatie uit het linker menu.
  • Zorg ervoor dat de Gebruik ingebedde JDK checkbox is geselecteerd.

Als hiermee het probleem niet is opgelost, navigeert u terug naar Bestand> Projectstructuur ...> SDK-locatie, en voer handmatig het volledige bestandspad voor uw JDK in. Als u niet zeker weet waar de JDK op uw ontwikkelmachine is geïnstalleerd, kunt u dat achterhalen door Terminal (Mac) of Command Prompt (Windows) te openen en de volgende opdracht in te voeren:

/ Usr / libexec / java_home

4. Fout bij het installeren van APK

Hoewel AVD's geweldig zijn om uw app te testen in een breed scala van verschillende hardware en software, moet u uw app altijd testen op ten minste één fysieke Android-smartphone of -tablet. De mogelijkheid van Android Studio om een ​​verbonden Android-apparaat te herkennen is echter notoir treffend.

Als u uw apparaat hebt aangesloten op uw ontwikkelmachine maar een probleem ondervindt Fout bij het installeren van APK bericht wanneer u uw APK probeert te installeren, of uw apparaat wordt niet eens weergegeven in de Selecteer Deployment Target venster, probeer dan de volgende fixes:

Controleer of USB-foutopsporing is ingeschakeld. 

Open uw apparaat instellingen, selecteer vervolgens Ontwikkelaarsopties, en zorg ervoor USB debugging is ingeschakeld. Als je het niet ziet Ontwikkelaarsopties in de instellingen menu en selecteer vervolgens Over telefoon en blijf tikken Nummer bouwen tot een U bent nu een ontwikkelaar melding verschijnt. Keer terug naar de main instellingen scherm, en dat zou je moeten vinden Ontwikkelaarsopties is toegevoegd.

Controleer het scherm van uw smartphone of tablet. 

Soms heeft uw apparaat mogelijk wat extra invoer nodig voordat het verbinding maakt met uw ontwikkelmachine. Het kan bijvoorbeeld vragen om te kiezen tussen verschillende modi of om de verbinding expliciet te autoriseren.

Zorg ervoor dat u het juiste USB-stuurprogramma hebt geïnstalleerd. 

Als u zich ontwikkelt op Windows, moet u het juiste OEM USB-stuurprogramma voor uw apparaat downloaden. Als u een Nexus-gebruiker bent, kunt u de Google USB stuurprogramma via de SDK Manager van Android Studio.

Controleer of uw apparaat voldoet aan de minimale SDK-vereisten van uw project. 

U vindt de minimum SDK van uw project in uw gradlevel.bouwbestand op moduleniveau en kunt controleren welke versie van Android op uw apparaat is geïnstalleerd door de instellingen en vegen naar de Over telefoon sectie.

Probeer uw adb-proces (Android Debug Bridge) opnieuw te starten. 

Open een terminal- of opdrachtpromptvenster en wijzig vervolgens de map (CD), dus het wijst naar jou platform-gereedschappen venster, bijvoorbeeld:

cd / Gebruikers / Downloads / adt-bundle-mac / sdk / platform-tools

Beëindig en herstart vervolgens het adb-proces door de volgende opdrachten achter elkaar in te voeren:

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

Start alles opnieuw! 

Als al het andere niet lukt, probeer dan eerst je apparaat los te koppelen en opnieuw aan te sluiten, je apparaat opnieuw op te starten, Android Studio opnieuw op te starten en als laatste redmiddel je ontwikkelingsmachine opnieuw op te starten..

5. INSTALL_FAILED_INSUFFICIENT_STORAGE

Als u deze fout tegenkomt bij een poging om uw project te installeren, betekent dit dat het doelapparaat niet genoeg geheugen heeft.

Als u probeert uw project op een AVD te installeren, moet u controleren hoeveel ruimte u aan deze AVD hebt toegewezen:

  • Start de AVD Manager.
  • Zoek de AVD in kwestie en klik op de bijbehorende Bewerk deze AVD icoon.
  • Klik in het venster dat verschijnt Toon geavanceerde instellingen.
  • Ga naar de Geheugen en opslag sectie.

In dit gedeelte worden de verschillende soorten geheugen vermeld die u aan deze AVD hebt toegewezen. Als een van deze waarden ongebruikelijk laag is, moet u deze verhogen om beter het geheugen weer te geven dat beschikbaar is voor uw typische Android-smartphone of -tablet:

  • RAM. De hoeveelheid RAM die beschikbaar is voor het geëmuleerde apparaat.
  • VM Heap. Hoeveel heap-ruimte (dat wil zeggen geheugen) is toegewezen aan de virtuele machine (VM) van de geëmuleerde smartphone of tablet.
  • Intern geheugen. De hoeveelheid niet-verwijderbaar geheugen die beschikbaar is voor het geëmuleerde apparaat.
  • SD-kaart. De hoeveelheid verwijderbaar geheugen die beschikbaar is. Als u een virtuele SD-kaart wilt gebruiken die wordt beheerd door Android Studio, selecteert u -Studio beheerde en voer de grootte in van de virtuele SD-kaart die u wilt maken (de aanbevolen minimumwaarde is 100 MB). U kunt ook de "ruimte" van de SD-kaart in een bestand beheren door te selecteren Extern bestand en geef vervolgens de locatie op die u wilt gebruiken.

Als er niets vreemds aan het geheugen van uw AVD is of als u probeert uw app op een fysieke Android-smartphone of -tablet te installeren, betekent deze fout meestal dat uw gecompileerde app gewoon te groot is. Een applicatie die tijdens de installatie een flinke hap uit het geheugen van het apparaat haalt, zal nooit goed gaan. 

Als u de grootte van uw APK drastisch wilt verkleinen, probeert u de volgende technieken: 

  • Gebruik ProGuard om ongebruikte klassen, velden, methoden en attributen te verwijderen. Om ProGuard in te schakelen, opent u uw build.gradle-bestand op moduleniveau en voegt u het volgende toe:

buildTypes release // ProGuard // minifyEnabled true // inschakelen Omdat we onze APK-grootte zo veel mogelijk willen verkleinen, gebruik ik de instellingen van het bestand proguard-android-optimise.txt // proguardFiles getDefaultProguardFile ('proguard -android-optimaliseren.txt '),' proguard-rules.pro '
  • Gebruik de aapt-tool om uw drawables te optimaliseren met verliesloze compressie of gebruik een programma dat is ontworpen om de grootte van uw PNG-bestanden (zopflipng, pngcrush, OptiPNG, TinyPNG of pngquant) of de grootte van uw JPEG's (packJPG) te verkleinen. U kunt ook proberen uw PNG- en JPEG-bestanden te vervangen door afbeeldingen in WebP-indeling.
  • Vergeet niet om alle debuggerelateerde functionaliteit uit de releaseversie van uw app te verwijderen. Android vereist niet dat deze informatie wordt uitgevoerd, dus het neemt gewoon onnodige ruimte in beslag.
  • Doorzoek uw project op dubbele bronnen. Zelfs lichtgewichtbronnen zoals dubbele reeksen dragen iets bij aan je uiteindelijke APK-formaat.
  • Gebruik Lint om bronnen te identificeren waarnaar elders in uw code niet wordt verwezen en verwijder deze bronnen. Selecteer Lint om Lint uit te voeren Analyseren> Code inspecteren ... van de Android Studio-werkbalk.
  • Schakel resource shrinking in, door toe te voegen shrinkResources true in het build.gradle-bestand van uw project.
  • Als u variaties van dezelfde afbeelding moet gebruiken, gebruikt u dezelfde basisafbeelding en past u deze aan tijdens runtime in plaats van meerdere versies van dezelfde afbeelding toe te voegen aan uw project. U kunt bijvoorbeeld verschillende kleuren toepassen op een afbeelding met android: tint en tintMode, en je kunt een afbeelding draaien met android: fromDegrees, android: toDegrees, android: PivotX, en android: pivotY.
  • Optimaliseer uw bibliotheken. Probeer onnodige of geheugenintensieve bibliotheken uit uw project te verwijderen. Als u toch een grote bibliotheek nodig hebt, controleer dan of u deze bibliotheek kunt optimaliseren voor de mobiele omgeving, aangezien externe bibliotheekcode vaak niet met mobiel wordt geschreven. Houd er ook rekening mee dat veel bibliotheken een groot aantal gelokaliseerde tekenreeksen bevatten. Als uw app deze bibliotheken niet officieel ondersteunt, kunt u de grootte van de bibliotheek mogelijk verkleinen door Gradle te vertellen deze tekenreeksen niet op te nemen in uw gecompileerde APK. Als u de talen wilt opgeven die uw app officieel ondersteunt, opent u het build.gradle-bestand op moduleniveau en gebruikt u het resConfigs attribuut. Hier specificeren we bijvoorbeeld dat we alleen Engelstalige strings in ons project willen opnemen:

android defaultConfig resConfigs "en"
  • Overweeg of uw APK een grote hoeveelheid inhoud bevat die de individuele gebruiker kan downloaden, maar nooit gebruikt. Een apparaat met een hdpi-scherm heeft bijvoorbeeld niet veel nut xxxhdpi middelen! Een van de meest effectieve manieren om de APK te verkleinen, is om deze te scheiden in meerdere APK's, dus wanneer de gebruiker uw app downloadt, ontvangen deze een APK die alleen de code en bronnen bevat die relevant zijn voor hun specifieke apparaat. U vindt meer informatie over het maken van APK's die zich richten op verschillende schermdichtheden en specifieke ABI's (binaire interfaces van toepassingen) via de officiële Android-documenten.

6. ActivityNotFoundException

Een ActivityNotFoundException treedt op wanneer een oproep naar startActivity (Intent) of een van zijn varianten faalt omdat het Activiteit kan het gegeven niet uitvoeren voornemen.

De meest voorkomende oorzaak van een ActivityNotFoundException is het vergeten om een ​​activiteit in je manifest aan te geven, dus open je manifest en controleer of je al je activiteiten hebt verklaard. Je moet ook controleren of je elke activiteit hebt aangegeven correct, gebruik van een volledig gekwalificeerde klassenaam of een volledige stop als afkorting voor de pakketnaam. Beide van de volgende zijn bijvoorbeeld geldig:

Als u geen problemen met uw manifest ziet, zijn er enkele andere mogelijke oorzaken van ActivityNotFoundExceptions. Ten eerste, als u deze fout tegenkomt na het verplaatsen van een Activiteit klasse van het ene pakket naar het andere, dan is het mogelijk dat je Android Studio in de war hebt gebracht en je project alleen moet opschonen en opnieuw opbouwen.

Een ActivityNotFoundException kan ook worden veroorzaakt als een fout in het doelwit optreedt Activiteit wordt niet correct geladen. Om te controleren of dit in uw project gebeurt, plaatst u uw intentiecode in een try-catch-blok:

probeer // Uw code hier // vangst (ActivityNotFoundException e) e.printStackTrace (); 

Voer uw toepassing opnieuw uit en bekijk vervolgens de Logcat Monitor van Android Studio om na te gaan of er uitzonderingen zijn gemaakt die mogelijk verhinderen dat de doelactiviteit wordt gemaakt. Als dit het geval is, zou het oplossen van deze fouten het probleem moeten oplossen ActivityNotFoundException, te.

7. ClassCastException

De ClassCastException fout is gerelateerd aan de conversiefunctie van Java, waarmee u variabelen van het ene type naar het andere kunt casten. Je ontmoet een ClassCastException wanneer u een object probeert te casten naar een klasse waarvan het geen instantie is. De volgende codefragmenten zullen bijvoorbeeld resulteren in een ClassCastException:

Object x = nieuw geheel getal (0); System.out.println ((String) x);
ImageView-afbeelding = (ImageView) context.findViewById (R.id.button);

Dit foutbericht bevat informatie over de regel die de oorzaak is ClassCastException fout, dus navigeer naar dit deel van uw project, controleer welke objecten daar worden geplaatst en los elke niet-overeenstemming op.

Als je een probleem met je casting niet kunt herkennen, overweeg dan of je recent wat hebt verplaatst Keer bekeken rond in uw lay-outresourcebestanden, zoals sommige gebruikers hebben gemeld met een ClassCastException na het herschikken van hun Keer bekeken. Als u vermoedt dat dit de oorzaak is van uw ClassCastException, vertel vervolgens aan Android Studio om uw lay-outbestanden opnieuw te laten regenereren door een cyclus voor opschonen / opnieuw opbouwen uit te voeren. Dit dwingt Android Studio om uw recente wijzigingen in de lay-out correct te registreren, wat uw oplossing zou moeten oplossen ClassCastException.

8. NullPointerException

In Java, wanneer u een referentievariabele declareert, maakt u in feite een aanwijzer naar een object. U kunt verklaren dat een object momenteel naar een onbekend gegeven verwijst door een nulwaarde aan de verwijzing van dat object toe te wijzen. Null-waarden kunnen handig zijn bij het coderen van sommige ontwerppatronen, maar als u een NullPointerException (NPE) tegenkomt, betekent dit dat u hebt geprobeerd een referentie te gebruiken die wijst naar een nulwaarde, alsof deze verwijst naar een object. Omdat er geen code is om uit te voeren op de locatie waar deze referentie wijst, kom je terecht met een NPE.

Een NPE wordt meestal vergezeld door informatie over waar deze uitzondering werd gepakt, dus de Logcat Monitor moet de exacte regel bevatten waarop deze fout zich heeft voorgedaan. Navigeer naar dit gedeelte van uw project en identificeer de referentie die gelijk is aan nul. U moet dan de locatie zoeken waar de waarde moet worden ingesteld en deze instellen.

De findViewById methode kan ook null retourneren als het gevraagde is Uitzicht kan niet worden gevonden, dus als uw NPE voorkomt in een regel die een bevat findViewById, controleer of u de lay-out die dit bevat, heeft geïnitialiseerd Uitzicht. Let ook op spelfouten of typfouten die mogelijk in je zijn gekropen findViewById oproep, aangezien deze ook kunnen resulteren in een NPE.  

Om te voorkomen dat NPE's in uw project voorkomen, moet u ervoor zorgen dat al uw objecten zijn geïnitialiseerd voordat u ze probeert te gebruiken, en altijd controleren of een variabele niet nul is voordat u een methode of een veld uit dat object opvraagt.

9. Geen reactie van de toepassing

Dit is een fout die verschijnt als een dialoog op het Android-apparaat of AVD die u gebruikt om uw app te testen. De Toepassing reageert niet (ANR) -fout treedt op wanneer de gebruikersinterface van uw app vastloopt en gedurende meer dan vijf seconden niet meer reageert op gebruikersinvoer. Dit gebeurt meestal omdat uw app langdurige of intensieve bewerkingen probeert uit te voeren op de belangrijkste UI-thread van Android.

In Android is de hoofd UI-thread verantwoordelijk voor het verzenden van alle gebruikersinvoergebeurtenissen naar de juiste UI-widgets en voor het bijwerken van de gebruikersinterface van uw app. Deze thread kan echter maar één taak tegelijk verwerken, dus als u de hoofdthread blokkeert bij langdurige of intensieve bewerkingen, reageert uw gebruikersinterface pas helemaal als deze taak is voltooid.

Als je een ANR-bericht tegenkomt tijdens het testen van je app, dan jij definitief nodig om een ​​kijkje te nemen naar het werk dat je aan het doen bent op de rode draad. Als u deze fout echter niet expliciet tegenkomt, maar merkt dat uw app soms traag of laggy voelt, dan is dit een indicatie dat u op het punt staat een ANR-fout te maken en nogmaals moet u de staat bekijken van uw UI-thread.

ANR-fouten oplossen (en in de buurt-ANR-fouten), moet u alle bewerkingen identificeren die het potentieel hebben om langzaam te werken of die een aanzienlijke verwerkingskracht vereisen, en deze dan van de rode draad verwijderen. U doet dit door een werkthread te maken waarbij deze bewerkingen kunnen worden uitgevoerd zonder risico op blokkeren van de hoofd UI-thread.

Er zijn verschillende methoden om extra threads te maken, maar de eenvoudigste oplossing is om een AsynTask, omdat deze klasse al een eigen werkthread bevat en een onPostExecute () callback die u kunt gebruiken om te communiceren met de belangrijkste UI-thread van Android.

AsyncTasks zijn echter beter geschikt om korte achtergrondbewerkingen uit te voeren, dus als u een langlopende bewerking moet uitvoeren, moet u een Service of een IntentService in plaats daarvan.

Hoewel het verplaatsen van langlopende en intensieve taken uit de hoofdthema de meeste invloed heeft op de prestaties van uw app, is het de beste praktijk om zo weinig mogelijk werk uit te voeren op de hoofd UI-thread. Zelfs als u een kleine hoeveelheid onnodige code op de hoofdthread uitvoert, kan dit van invloed zijn op de reactievermogen van uw app, dus als u eenmaal succesvol al uw langlopende en intensieve bewerkingen hebt verplaatst, moet u kijken of er meer code is die u kunt gebruiken ga van de rode draad af.

10. Alleen de originele draad die een kijkhiërarchie heeft gemaakt, kan zijn weergaven aanraken

In Android kunt u uw gebruikersinterface alleen via de hoofdthema bijwerken. Als u probeert toegang te krijgen tot UI-elementen van een andere thread, dan zult u deze fout tegenkomen.

U kunt dit probleem oplossen door het gedeelte van uw achtergrondtaak te identificeren dat probeert de gebruikersinterface bij te werken en naar een te verplaatsen runOnUiThread, bijvoorbeeld:

runOnUiThread (nieuw Runnable () @Override openbare ongeldige run () // Update uw gebruikersinterface //);

Als alternatief kunt u een handler gebruiken of uw achtergrondwerk uitvoeren in een AsyncTask, omdat u met AsyncTask's kunt communiceren met de hoofdthread. onPostExecute () callback-methode. Als u merkt dat u regelmatig overschakelt tussen threads, wilt u misschien RxAndroid bekijken, omdat u met deze bibliotheek een nieuwe thread kunt maken, de werkzaamheden kunt plannen die in deze thread kunnen worden uitgevoerd en de resultaten vervolgens in de hoofdthread kunt plaatsen. allemaal met slechts een paar regels code.

11. NetworkOnMainThreadException

Deze uitzondering wordt gegenereerd wanneer uw app probeert netwerkbewerkingen uit te voeren op de hoofdthema, zoals het verzenden van API-aanvragen, verbinden met een database op afstand of het downloaden van een bestand. Omdat netwerkbewerkingen tijdrovend en arbeidsintensief kunnen zijn, is de kans groot dat de hoofdthread wordt geblokkeerd, zodat Android 3.0 (Honeycomb) en hoger deze fout zullen veroorzaken wanneer u probeert een netwerkverzoek in te dienen bij de hoofdthread..

Als je een a tegenkomt NetworkOnMainThreadException, Zoek vervolgens de netwerkcode die op uw hoofdthread wordt gebruikt en verplaats deze naar een afzonderlijke thread.

Als u regelmatig netwerkaanvragen moet indienen, moet u misschien eens kijken naar Volley, een HTTP-bibliotheek die zijn eigen achtergrondthreads opstart, zodat alle netwerkaanvragen standaard worden uitgevoerd buiten de hoofdthread..

12. Activiteit heeft lekvenster dat hier oorspronkelijk is toegevoegd

Deze fout treedt op wanneer u probeert een dialoogvenster weer te geven nadat u de activiteit hebt afgesloten. Als u dit probleem tegenkomt, opent u uw activiteit en zorgt u ervoor dat u de dialoog op de juiste manier afsluit door te bellen verwerpen () in beide activiteiten onDestroy () of onPause () methode, bijvoorbeeld:

@Override beschermde leegte onDestroy () super.onDestroy (); if (pDialogue! = null) pDialogue.dismiss (); 

13. OutofMemoryError

Deze fout treedt op wanneer uw app een geheugenverzoek doet waaraan het systeem niet kan voldoen. Als u deze foutmelding krijgt, kunt u beginnen met het uitsluiten van alle meest voorkomende geheugenbeheerfouten. Controleer of u zich hebt herinnerd om al uw broadcast-ontvangers uit te schrijven en dat u al uw services hebt gestopt; zorg ervoor dat u referenties in statische lidvariabelen niet vasthoudt en dat u geen grote bitmaps probeert te laden.

Als je alle voor de hand liggende oorzaken van een hebt uitgesloten Onvoldoende geheugen fout, dan moet je dieper graven en onderzoeken hoe je app geheugen toewijst, want de kans is groot dat er een paar gebieden zijn waar je het geheugenbeheer van je app kunt verbeteren.

Android Studio heeft een hele ruimte die is bedoeld om u te helpen het geheugengebruik van uw app te analyseren, dus begin met selecteren Beeld> Venster Hulpprogramma's van de Android Studio-werkbalk. Op dit punt ziet u een van beide Android-monitor of Android Profiler optie, afhankelijk van de versie van Android Studio die u hebt geïnstalleerd.

We hebben eerder gesproken over het werken met de geheugenmonitor op deze website, maar aangezien Android Profiler een nieuwe toevoeging is aan Android Studio, laten we de belangrijkste functies snel bekijken..

Wanneer u Android Profiler opent, begint het automatisch met het opnemen van drie stukjes informatie.

Omdat we geïnteresseerd zijn in de manier waarop onze app geheugen gebruikt, geeft u de Geheugen deel een klik, waarmee de Memory Profiler.

De Memory Profiler bestaat uit een tijdlijn die de verschillende soorten geheugen weergeeft die momenteel door uw app worden toegewezen, bijvoorbeeld Java, inheems, en stack. Boven deze grafiek vindt u een rij met pictogrammen die u kunt gebruiken om verschillende acties te activeren:

  • Een garbage collection-gebeurtenis afdwingen.
  • Neem een ​​Hprof-momentopname van het toepassingsgeheugen. Dit is een momentopname van alle objecten in de heap van uw app, inclusief het soort objecten dat uw app toewijst, het aantal toegewezen objecten en hoeveel ruimte deze objecten innemen.
  • Record geheugentoewijzingen. Door de geheugentoewijzingen van uw app op te nemen tijdens het uitvoeren van bepaalde acties, kunt u de specifieke bewerkingen identificeren die te veel geheugen in beslag nemen.

Om de delen van uw applicatie te identificeren die verantwoordelijk zijn voor de Onvoldoende geheugen fout, besteed wat tijd aan interactie met uw app en controleer hoe de geheugentoewijzingen van uw app veranderen als reactie op verschillende acties. Zodra u hebt vastgesteld dat het gedeelte van uw project het probleem veroorzaakt, besteedt u enige tijd aandacht aan het onderzoek voor eventuele geheugenlekken, evenals eventuele inefficiënties in de manier waarop het geheugen gebruikt.

Conclusie

In dit artikel hebben we gekeken naar 13 van de foutmeldingen die u waarschijnlijk tegenkomt bij het ontwikkelen voor Android. We bespraken alle verschillende factoren die kunnen bijdragen aan deze fouten en de stappen die u moet nemen om ze op te lossen.

Als u wordt geplaagd door een foutmelding die we niet hebben behandeld, moet u in de eerste stap het volledige foutbericht naar Google kopiëren / plakken, omdat dit vaak discussies en blogberichten oplevert waarin mensen bespreken hoe ze moeten oplossen deze specifieke fout.

En als u nergens op internet een oplossing kunt vinden, kunt u de Android-community altijd rechtstreeks om hulp vragen door uw vraag te posten in Stack Overflow..

Kijk terwijl je hier bent naar enkele van onze andere berichten over de ontwikkeling van Android-apps!