7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Android SDK

So lösen Sie die 13 häufigsten Fehlermeldungen von Android

Scroll to top
Read Time: 21 mins

German (Deutsch) translation by Nikol Angelowa (you can also view the original English article)

Das Testen ist ein entscheidender Teil der Android-Entwicklung und ermöglicht es Ihnen, alle Bugs, Fehler und Leistungsprobleme auszubügeln, die in Ihrer App lauern können, bevor Sie sie der Öffentlichkeit zugänglich machen.

Jedes Mal, wenn ein Fehler auftritt, generiert Android eine Fehlermeldung und zeigt diese Meldung dann entweder als Teil des Logcat-Monitors von Android Studio oder als Dialog auf dem Gerät an, das Sie zum Testen Ihrer App verwenden.

Diese Fehlermeldungen sind in der Regel kurz und prägnant und auf den ersten Blick vielleicht nicht so hilfreich. Tatsächlich enthalten diese Nachrichten jedoch alle Informationen, die Sie benötigen, um Ihr Projekt wieder auf den richtigen Weg zu bringen – Sie müssen nur wissen, wie Sie sie entschlüsseln!

In diesem Artikel werfen wir einen detaillierten Blick auf die 13 Fehlermeldungen, die Ihnen bei der Entwicklung einer Android-App am wahrscheinlichsten begegnen. Wir werden genau untersuchen, was jede dieser Fehlermeldungen wirklich bedeutet, alle möglichen Gründe untersuchen, warum Sie auf jeden Fehler stoßen, und vor allem Schritt-für-Schritt-Anweisungen zur Behebung teilen.

Erkennen von Fehlermeldungen

Es gibt eine Vielzahl von Fehlermeldungen, die beim Testen Ihrer App auftreten können, von schwerwiegenden Fehlern, die dazu führen, dass Ihre App beim ersten Versuch, sie auf einem Zielgerät zu installieren, abstürzt, bis hin zu subtileren Fehlern, die die Leistung Ihrer Anwendung mit der Zeit beeinträchtigen .

Abhängig von der Art des aufgetretenen Fehlers zeigt Android die Fehlermeldung entweder auf dem Gerät an, das Sie zum Testen Ihrer App verwenden, oder in Android Studio.

Fehlermeldungen, die auf einem physischen Gerät oder AVD erscheinen, zu erkennen, ist einfach – Sie müssen nur auf alle Dialoge achten, die auf dem Bildschirm Ihres Geräts erscheinen! Das Erkennen von Fehlern, die in Android Studio auftreten, kann jedoch schwierig sein, da der Logcat-Monitor eine große Menge an Informationen aufzeichnet und wichtige Fehlermeldungen leicht übersehen werden.

Der einfachste Weg, um sicherzustellen, dass Sie keine Fehlermeldungen verpassen, besteht darin, das Dropdown-Menü Ausführlich von Logcat Monitor zu öffnen und auf Fehler zu setzen, wodurch alles außer Fehlermeldungen herausgefiltert wird.

Open Logcat Monitors dropdown and select ErrorOpen Logcat Monitors dropdown and select ErrorOpen Logcat Monitors dropdown and select Error

1. R.layout.main kann nicht gefunden werden / Symbol R kann nicht aufgelöst werden

Dieser Fehler wird verursacht, wenn Android Studio Ihre R.java-Datei nicht korrekt generieren kann und oft aus dem Nichts auftaucht – in einer Minute funktioniert alles einwandfrei und in der nächsten Minute kann jeder Teil Ihres Projekts nicht kompiliert werden. Erschwerend kommt hinzu, dass Android Studio, wenn der R.layout-Fehler auftritt, normalerweise alle Ihre Layout-Ressourcendateien als fehlerbehaftet kennzeichnet, was es schwierig macht zu wissen, wo man nach der Fehlerquelle suchen soll.

Oft ist die effektivste Lösung die einfachste: Bereinigen Sie Ihr Projekt und bauen Sie es neu auf. Wählen Sie in der Android Studio-Symbolleiste Erstellen > Projekt bereinigen, warten Sie einen Moment und erstellen Sie dann Ihr Projekt, indem Sie Erstellen > Projekt neu erstellen auswählen.

Wenn ein einzelner Reinigungs-/Wiederaufbauzyklus nicht funktioniert, versuchen Sie, diesen Vorgang einige Male zu wiederholen, da einige Entwickler positive Ergebnisse gemeldet haben, nachdem sie mehrere Reinigungs-/Wiederaufbauzyklen in schneller Folge abgeschlossen haben.

Wenn dieser Fehler nach dem Verschieben einiger Dateien und Verzeichnisse auftritt, ist es möglich, dass der R.layout-Fehler durch eine Nichtübereinstimmung zwischen dem Cache von Android Studio und dem aktuellen Layout Ihres Projekts verursacht wird. Wenn Sie vermuten, dass dies der Fall sein könnte, wählen Sie in der Symbolleiste von Android Studio Datei > Caches ungültig machen / Neustart > Invalidieren und neu starten.

Probleme mit den Namen Ihrer Ressourcen können auch verhindern, dass die R.java-Datei korrekt erstellt wird. Stellen Sie daher sicher, dass Sie nicht über mehrere Ressourcen mit demselben Namen verfügen und dass keiner Ihrer Dateinamen ungültige Zeichen enthält. Android Studio unterstützt nur Kleinbuchstaben a-z, 0-9, Punkte und Unterstriche, und ein einzelnes ungültiges Zeichen kann einen R.layout-Fehler im gesamten Projekt verursachen, selbst wenn Sie diese Ressource nirgendwo in Ihrem Projekt verwenden!

Wenn Sie einen Fehler identifizieren und beheben, Android Studio jedoch weiterhin den R.layout-Fehler anzeigt, müssen Sie möglicherweise einen Bereinigungs-/Neuerstellungszyklus durchführen, bevor Android Studio Ihre Änderungen ordnungsgemäß registriert.

2. Zu viele Feldreferenzen….Max ist 65.536

Wenn Sie Ihre App kompilieren, enthält das APK ausführbare Bytecode-Dateien in Form von Dalvik Executable(DEX)-Bytecode-Dateien. Die DEX-Spezifikation besagt, dass eine einzelne DEX-Datei maximal 65.536 Methoden referenzieren kann, und wenn der Fehler Too many fields… auftritt, bedeutet dies, dass Ihre App dieses Limit überschritten hat. Beachten Sie, dass dies eine Beschränkung der Anzahl der Methoden ist, auf die Ihr Projekt verweist, und nicht die Anzahl der Methoden, die Ihr Projekt definiert.

Wenn dieser Fehler auftritt, können Sie entweder:

  • Reduzieren Sie die Anzahl der Referenzen in Ihrem Projekt. Eine der effektivsten Möglichkeiten zum Trimmen Ihrer Methodenreferenzen besteht darin, die Abhängigkeiten Ihrer Anwendung zu überprüfen, da diese oft einen der größten Beiträge zu Methodenreferenzen leisten.
  • Konfigurieren Sie Ihre App so, dass sie mehr als eine DEX-Datei verwendet, indem Sie Multidex aktivieren.

Der Prozess zum Aktivieren der Multidex-Unterstützung hängt von den Android-Versionen ab, die Ihr Projekt unterstützt.

Wenn Sie auf Android 5.0 oder höher abzielen, öffnen Sie im ersten Schritt Ihre build.gradle-Datei auf Modulebene und setzen Sie multiDexEnabled auf true:

Wenn Ihre minSdkVersion jedoch 20 oder niedriger ist, müssen Sie das Attribut multiDexEnabled true hinzufügen und dann die Multidex-Unterstützungsbibliothek als Projektabhängigkeit hinzufügen:

Der nächste Schritt hängt davon ab, ob Sie die Application-Klasse überschreiben oder nicht.

Wenn Ihr Projekt die Application-Klasse überschreibt, öffnen Sie Ihr Manifest und fügen Sie Folgendes zum <application>-Tag hinzu:

Wenn Ihr Projekt die Application-Klasse nicht überschreibt, müssen Sie stattdessen MultiDexApplication erweitern:

Wenn Sie schließlich die Application-Klasse überschreiben, die Basisklasse jedoch nicht ändern können, können Sie Multidex aktivieren, indem Sie die Methode attachBaseContext() überschreiben und MultiDex.install(this) aufrufen, zum Beispiel:

3. Bitte wählen Sie ein gültiges JDK-Verzeichnis

Wenn Sie beim Erstellen Ihrer App einen JDK-Fehler erhalten, bedeutet dies, dass Android Studio Schwierigkeiten hat, herauszufinden, wo das JDK auf Ihrem Entwicklungscomputer installiert ist.

So beheben Sie diesen Fehler:

  • Wählen Sie Datei > Projektstruktur… aus der Android Studio-Symbolleiste.
  • Wählen Sie im linken Menü SDK-Speicherort aus.
  • Stellen Sie sicher, dass das Kontrollkästchen Eingebettetes JDK verwenden aktiviert ist.
Navigate to File Project structure SDK Location and select the Use embedded JDK checkboxNavigate to File Project structure SDK Location and select the Use embedded JDK checkboxNavigate to File Project structure SDK Location and select the Use embedded JDK checkbox

Wenn das Problem dadurch nicht behoben wird, navigieren Sie zurück zu Datei > Projektstruktur… > SDK-Speicherort und geben Sie den vollständigen Dateipfad für Ihr JDK manuell ein. Wenn Sie sich nicht sicher sind, wo das JDK auf Ihrem Entwicklungscomputer installiert ist, können Sie dies herausfinden, indem Sie das Terminal (Mac) oder die Eingabeaufforderung (Windows) öffnen und den folgenden Befehl eingeben:

4. Fehler beim Installieren von APK

Während sich AVDs hervorragend zum Testen Ihrer App auf einer Vielzahl unterschiedlicher Hard- und Software eignen, sollten Sie Ihre App immer auf mindestens einem physischen Android-Smartphone oder -Tablet testen. Die Fähigkeit von Android Studio, ein verbundenes Android-Gerät zu erkennen, ist jedoch bekanntermaßen ein Hit und Miss.

Wenn Sie Ihr Gerät an Ihren Entwicklungscomputer angeschlossen haben, aber bei jedem Versuch, Ihr APK zu installieren, eine Fehlermeldung beim Installieren des APKs angezeigt wird oder Ihr Gerät nicht einmal im Fenster Bereitstellungsziel auswählen angezeigt wird, versuchen Sie die folgenden Fehlerbehebungen:

Überprüfen Sie, ob das USB-Debugging aktiviert ist.

Öffnen Sie die Einstellungen Ihres Geräts, wählen Sie dann Entwickleroptionen und stellen Sie sicher, dass USB-Debugging aktiviert ist. Wenn im Menü Einstellungen keine Entwickleroptionen angezeigt werden, wählen Sie Über das Telefon und tippen Sie so lange auf Build-Nummer, bis eine Benachrichtigung über Sie sind jetzt als Entwickler angezeigt wird. Kehren Sie zum Hauptbildschirm Einstellungen zurück, und Sie sollten feststellen, dass Entwickleroptionen hinzugefügt wurden.

Überprüfen Sie den Bildschirm Ihres Smartphones oder Tablets.

Manchmal erfordert Ihr Gerät möglicherweise zusätzliche Eingaben, bevor es mit Ihrem Entwicklungscomputer verbunden wird. Sie werden beispielsweise aufgefordert, zwischen verschiedenen Modi zu wählen oder die Verbindung explizit zu autorisieren.

Stellen Sie sicher, dass Sie den richtigen USB-Treiber installiert haben.

Wenn Sie unter Windows entwickeln, müssen Sie den entsprechenden OEM-USB-Treiber für Ihr Gerät herunterladen. Wenn Sie ein Nexus-Benutzer sind, können Sie den Google USB-Treiber über den SDK-Manager von Android Studio herunterladen.

Überprüfen Sie, ob Ihr Gerät die SDK-Mindestanforderungen Ihres Projekts erfüllt.

Sie finden das Mindest-SDK Ihres Projekts in Ihrer Datei gradle.build auf Modulebene und können überprüfen, welche Android-Version auf Ihrem Gerät installiert ist, indem Sie die Einstellungen öffnen und zum Abschnitt Über das Telefon wischen.

Versuchen Sie, Ihren adb-Prozess (Android Debug Bridge) neu zu starten.

Öffnen Sie ein Terminal- oder Eingabeaufforderungsfenster und ändern Sie dann das Verzeichnis (cd), sodass es auf Ihr Plattform-Tools-Fenster zeigt, zum Beispiel:

Beenden und starten Sie dann den adb-Prozess, indem Sie nacheinander die folgenden Befehle eingeben:

Alles neu starten!

Wenn alles andere fehlschlägt, versuchen Sie, Ihr Gerät zu trennen und dann erneut zu verbinden, Ihr Gerät neu zu starten, Android Studio neu zu starten und als absoluten letzten Ausweg Ihren Entwicklungscomputer neu zu starten.

5. INSTALL_FAILED_INSUFFICIENT_STORAGE

Wenn dieser Fehler beim Versuch, Ihr Projekt zu installieren, auftritt, bedeutet dies, dass das Zielgerät nicht über genügend Arbeitsspeicher verfügt.

Wenn Sie versuchen, Ihr Projekt auf einem AVD zu installieren, sollten Sie überprüfen, wie viel Speicherplatz Sie diesem bestimmten AVD zugewiesen haben:

  • Starten Sie den AVD-Manager.
  • Suchen Sie das betreffende AVD und klicken Sie auf das zugehörige Symbol Diese AVD bearbeiten.
  • Klicken Sie im angezeigten Fenster auf Erweiterte Einstellungen anzeigen.
  • Scrollen Sie zum Abschnitt Speicher und Speicher.

In diesem Abschnitt werden die verschiedenen Speichertypen aufgelistet, die Sie diesem bestimmten AVD zugewiesen haben. Wenn einer dieser Werte ungewöhnlich niedrig ist, sollten Sie ihn erhöhen, um den verfügbaren Speicher Ihres typischen Android-Smartphones oder -Tablets besser widerzuspiegeln:

  • RAM. Die Menge an RAM, die dem emulierten Gerät zur Verfügung steht.
  • VM-Heap. Wie viel Heap-Speicher (d. h. Arbeitsspeicher) der Virtual Machine (VM) des emulierten Smartphones oder Tablets zugewiesen wird.
  • Interne Speicher. Die Menge des nicht entfernbaren Speichers, der dem emulierten Gerät zur Verfügung steht.
  • SD-Karte. Die Menge des verfügbaren Wechselspeichers. Wenn Sie eine von Android Studio verwaltete virtuelle SD-Karte verwenden möchten, wählen Sie Studio-managed aus und geben Sie die Größe der virtuellen SD-Karte ein, die Sie erstellen möchten (der empfohlene Mindestwert beträgt 100 MB). Alternativ können Sie den "Speicherplatz" der SD-Karte in einer Datei verwalten, indem Sie Externe Datei auswählen und dann den gewünschten Speicherort angeben.

Wenn der Speicher Ihres AVD nichts Seltsames ist oder Sie versuchen, Ihre App auf einem physischen Android-Smartphone oder -Tablet zu installieren, bedeutet dieser Fehler normalerweise, dass Ihre kompilierte App einfach zu groß ist. Eine Anwendung, die bei der Installation einen erheblichen Teil des Speichers des Geräts beansprucht, wird nie gut ankommen.

Wenn Sie die Größe Ihres APK drastisch reduzieren müssen, probieren Sie die folgenden Techniken aus:

  • Verwenden Sie ProGuard, um nicht verwendete Klassen, Felder, Methoden und Attribute zu entfernen. Um ProGuard zu aktivieren, öffnen Sie Ihre Datei build.gradle auf Modulebene und fügen Sie Folgendes hinzu:

  • Verwenden Sie das aapt-Tool, um Ihre Drawables mit verlustfreier Komprimierung zu optimieren, oder verwenden Sie ein Programm, das die Größe Ihrer PNG-Dateien (zopflipng, pngcrush, OptiPNG, TinyPNG oder pngquant) oder die Größe Ihrer JPEGs (packJPG) reduziert. Alternativ können Sie versuchen, Ihre PNG- und JPEG-Dateien durch Bilder im WebP-Format zu ersetzen.
  • Denken Sie daran, alle Debug-bezogenen Funktionen aus der Release-Version Ihrer App zu entfernen. Android benötigt diese Informationen nicht zum Ausführen, daher nimmt es nur unnötigen Speicherplatz ein.
  • Durchsuchen Sie Ihr Projekt nach doppelten Ressourcen. Selbst leichte Ressourcen wie doppelte Strings tragen etwas zu Ihrer endgültigen APK-Größe bei.
  • Verwenden Sie Lint, um alle Ressourcen zu identifizieren, auf die in Ihrem Code nirgendwo verwiesen wird, und entfernen Sie diese Ressourcen. Um Lint auszuführen, wählen Sie in der Android Studio-Symbolleiste Analysieren > Code prüfen... aus.
  • Aktivieren Sie das Verkleinern von Ressourcen, indem Sie der Datei build.gradle Ihres Projekts shrinkResources true hinzufügen.
  • Wenn Sie Variationen desselben Images verwenden müssen, verwenden Sie dasselbe Basisimage und passen Sie es zur Laufzeit an, anstatt mehrere Versionen desselben Images zu Ihrem Projekt hinzuzufügen. Sie können beispielsweise mit android:tint und tintMode unterschiedliche Farben auf ein Bild anwenden und ein Bild mit android:fromDegrees, android:toDegrees, android:pivotX und android:pivotY drehen.
  • Optimieren Sie Ihre Bibliotheken. Versuchen Sie, unnötige oder speicherintensive Bibliotheken aus Ihrem Projekt zu entfernen. Wenn Sie eine große Bibliothek verwenden müssen, prüfen Sie, ob Sie diese Bibliothek für die mobile Umgebung optimieren können, da externer Bibliothekscode oft nicht für Mobilgeräte geschrieben wird. Sie sollten auch bedenken, dass viele Bibliotheken eine große Menge lokalisierter Zeichenfolgen enthalten. Wenn Ihre App diese Bibliotheken nicht offiziell unterstützt, können Sie die Größe der Bibliothek möglicherweise reduzieren, indem Sie Gradle anweisen, diese Zeichenfolgen nicht in Ihr kompiliertes APK aufzunehmen. Um die Sprachen anzugeben, die Ihre App offiziell unterstützt, öffnen Sie die Datei build.gradle auf Modulebene und verwenden Sie das resConfigs-Attribut. Hier geben wir beispielsweise an, dass wir nur englischsprachige Zeichenfolgen in unser Projekt aufnehmen möchten:

  • Überlegen Sie, ob Ihr APK eine große Menge an Inhalten enthält, die der einzelne Benutzer möglicherweise herunterladen, aber niemals verwenden kann. Zum Beispiel hat ein Gerät mit einem HDPI-Bildschirm nicht viel Verwendung für xxxhdpi-Assets! Eine der effektivsten Möglichkeiten, die Größe Ihres APKs zu reduzieren, besteht darin, es in mehrere APKs aufzuteilen. Wenn der Benutzer Ihre App herunterlädt, erhält er also ein APK, das nur den Code und die Ressourcen enthält, die für sein bestimmtes Gerät sinnvoll sind. Weitere Informationen zum Erstellen von APKs, die auf unterschiedliche Bildschirmdichten und spezifische ABIs (Application Binary Interfaces) abzielen, finden Sie in den offiziellen Android-Dokumenten.

6. ActivityNotFoundException

Eine ActivityNotFoundException tritt auf, wenn ein Aufruf von startActivity(Intent) oder einer seiner Varianten fehlschlägt, weil die Activity den angegebenen Intent nicht ausführen kann.

Die häufigste Ursache für eine ActivityNotFoundException ist das Vergessen, eine Aktivität in Ihrem Manifest zu deklarieren. Öffnen Sie also Ihr Manifest und überprüfen Sie, ob Sie alle Ihre Aktivitäten deklariert haben. Sie sollten auch überprüfen, ob Sie jede Aktivität richtig deklariert haben, indem Sie entweder einen vollständig qualifizierten Klassennamen oder einen Punkt als Kurzform für den Paketnamen verwenden. Zum Beispiel sind beide der folgenden gültig:

Wenn Sie keine Probleme mit Ihrem Manifest feststellen können, gibt es einige andere mögliche Ursachen für ActivityNotFoundExceptions. Wenn dieser Fehler nach dem Verschieben einer Activity-Klasse von einem Paket in ein anderes auftritt, haben Sie möglicherweise Android Studio verwirrt und müssen Ihr Projekt nur bereinigen und neu erstellen.

Eine ActivityNotFoundException kann auch verursacht werden, wenn ein Fehler in der Ziel Activity nicht korrekt geladen wird. Um zu überprüfen, ob dies in Ihrem Projekt auftritt, fügen Sie Ihren Intent-Code in einen try-catch-Block ein:

Führen Sie Ihre Anwendung erneut aus und sehen Sie sich dann den Logcat-Monitor von Android Studio an, um zu sehen, ob Ausnahmen erfasst wurden, die die Erstellung der Zielaktivität möglicherweise verhindern. Wenn dies der Fall ist, sollte das Beheben dieser Fehler auch die ActivityNotFoundException lösen.

7. ClassCastException

Der ClassCastException-Fehler hängt mit der Typkonvertierungsfunktion von Java zusammen, mit der Sie Variablen eines Typs in einen anderen umwandeln können. Sie stoßen auf eine ClassCastException, wenn Sie versuchen, ein Objekt in eine Klasse umzuwandeln, von der es keine Instanz ist. Die beiden folgenden Codeausschnitte führen beispielsweise zu einer ClassCastException:

Diese Fehlermeldung enthält Informationen zu der Zeile, die den ClassCastException-Fehler verursacht. Navigieren Sie also zu diesem Teil Ihres Projekts, überprüfen Sie, welche Objekte dort umgewandelt werden, und beheben Sie jede Nichtübereinstimmung.

Wenn Sie beim Casting kein Problem feststellen können, überlegen Sie, ob Sie kürzlich einige Views in Ihren Layoutressourcendateien verschoben haben, da einige Benutzer berichtet haben, dass nach dem Neuanordnen ihrer Views eine ClassCastException aufgetreten ist. Wenn Sie vermuten, dass dies die Ursache für Ihre ClassCastException sein könnte, weisen Sie Android Studio an, Ihre Layoutdateien von Grund auf neu zu generieren, indem Sie einen Bereinigungs-/Neuerstellungszyklus durchführen. Dies zwingt Android Studio, Ihre letzten Layoutänderungen ordnungsgemäß zu registrieren, wodurch Ihre ClassCastException behoben werden sollte.

8. NullPointerException

Wenn Sie in Java eine Referenzvariable deklarieren, erstellen Sie tatsächlich einen Zeiger auf ein Objekt. Sie können deklarieren, dass ein Objekt derzeit auf ein unbekanntes Datenelement zeigt, indem Sie der Referenz dieses Objekts einen Nullwert zuweisen. Nullwerte können beim Codieren einiger Entwurfsmuster nützlich sein, aber wenn Sie auf eine NullPointerException(NPE) stoßen, bedeutet dies, dass Sie versucht haben, einen Verweis zu verwenden, der auf einen Nullwert zeigt, als würde er auf ein Objekt verweisen. Da an der Stelle, auf die diese Referenz zeigt, kein Code ausgeführt werden muss, erhalten Sie eine NPE.

Eine NPE wird normalerweise von Informationen darüber begleitet, wo diese Ausnahme abgefangen wurde, daher sollte der Logcat-Monitor die genaue Zeile enthalten, in der dieser Fehler aufgetreten ist. Navigieren Sie zu diesem Bereich Ihres Projekts und identifizieren Sie die Referenz, die gleich null ist. Sie müssen dann den Ort finden, an dem der Wert festgelegt werden soll, und ihn festlegen.

Die findViewById-Methode kann auch null zurückgeben, wenn die angeforderte View nicht gefunden werden kann. Wenn Ihre NPE also in einer Zeile auftritt, die eine findViewById enthält, überprüfen Sie, ob Sie das Layout initialisiert haben, das diese View enthält. Achten Sie auch auf Rechtschreibfehler oder Tippfehler, die sich möglicherweise in Ihren findViewById-Aufruf eingeschlichen haben, da diese ebenfalls zu einer NPE führen können.

Um das Auftreten von NPEs in Ihrem Projekt zu vermeiden, stellen Sie sicher, dass alle Ihre Objekte initialisiert sind, bevor Sie versuchen, sie zu verwenden, und stellen Sie immer sicher, dass eine Variable nicht null ist, bevor Sie eine Methode oder ein Feld von diesem Objekt anfordern.

9. Fehler der Anwendung reagiert nicht

Dies ist ein Fehler, der als Dialog auf dem Android-Gerät oder AVD angezeigt wird, das Sie zum Testen Ihrer App verwenden. Der Fehler Application Not Responding (ANR) tritt auf, wenn die Benutzeroberfläche Ihrer App einfriert und länger als fünf Sekunden nicht auf Benutzereingaben reagiert. Dies geschieht normalerweise, weil Ihre App versucht, langwierige oder intensive Vorgänge im Haupt-UI-Thread von Android durchzuführen.

In Android ist der Haupt-UI-Thread dafür verantwortlich, alle Benutzereingabeereignisse an die entsprechenden UI-Widgets zu senden und die UI Ihrer App zu aktualisieren. Dieser Thread kann jedoch jeweils nur eine Aufgabe verarbeiten. Wenn Sie also den Hauptthread mit lang andauernden oder intensiven Vorgängen blockieren, reagiert Ihre Benutzeroberfläche vollständig nicht, bis diese Aufgabe abgeschlossen ist.

Wenn Sie beim Testen Ihrer App auf eine ANR-Meldung stoßen, müssen Sie sich unbedingt die Arbeit ansehen, die Sie im Hauptthread ausführen. Wenn Sie jedoch nicht explizit auf diesen Fehler stoßen, aber feststellen, dass sich Ihre App manchmal träge oder verzögert anfühlt, dann ist dies ein Hinweis darauf, dass Sie kurz vor einem ANR-Fehler stehen, und Sie sollten noch einmal einen Blick auf den Zustand werfen Ihres UI-Threads.

Um ANR-Fehler (und Beinahe-ANR-Fehler) zu beheben, müssen Sie alle Vorgänge identifizieren, die möglicherweise langsam ausgeführt werden oder die eine erhebliche Verarbeitungsleistung erfordern, und sie dann aus dem Hauptthread verschieben. Dazu erstellen Sie einen Worker-Thread, in dem diese Vorgänge ausgeführt werden können, ohne dass das Risiko besteht, den Haupt-UI-Thread zu blockieren.

Es gibt mehrere Methoden, um zusätzliche Threads zu erstellen, aber die einfachste Lösung ist die Verwendung einer AsynTask, da diese Klasse bereits einen eigenen Worker-Thread und einen onPostExecute()-Callback enthält, über den Sie mit dem Haupt-UI-Thread von Android kommunizieren können.

AsyncTasks eignen sich jedoch besser zum Ausführen kurzer Hintergrundvorgänge. Wenn Sie also einen Vorgang mit langer Ausführungszeit ausführen müssen, sollten Sie stattdessen einen Service oder einen IntentService verwenden.

Obwohl das Verschieben von lang andauernden und intensiven Aufgaben aus dem Hauptthread den größten Einfluss auf die Leistung Ihrer App hat, empfiehlt es sich, so wenig Arbeit wie möglich im Haupt-UI-Thread auszuführen. Selbst das Ausführen einer kleinen Menge unnötigen Codes im Hauptthread kann sich auf die Reaktionsfähigkeit Ihrer App auswirken. Wenn Sie also alle Ihre lang andauernden und intensiven Vorgänge erfolgreich verlagert haben, sollten Sie prüfen, ob noch mehr Code verfügbar ist den Hauptthread verlassen.

10. Nur der ursprüngliche Thread, der eine Ansichtshierarchie erstellt hat, kann seine Ansichten berühren

In Android können Sie Ihre Benutzeroberfläche nur über den Hauptthread aktualisieren. Wenn Sie versuchen, von einem anderen Thread aus auf UI-Elemente zuzugreifen, wird dieser Fehler auftreten.

Um dieses Problem zu beheben, identifizieren Sie den Teil Ihrer Hintergrundaufgabe, der versucht, die Benutzeroberfläche zu aktualisieren, und verschieben Sie ihn in einen runOnUiThread, zum Beispiel:

Alternativ können Sie einen Handler verwenden oder Ihre Hintergrundarbeit in einer AsyncTask ausführen, da Sie über die onPostExecute()-Callback-Methode von AsyncTask mit dem Hauptthread kommunizieren können. Wenn Sie schließlich regelmäßig zwischen Threads wechseln, sollten Sie sich RxAndroid ansehen, da Sie mit dieser Bibliothek einen neuen Thread erstellen, die Arbeit an diesem Thread planen und die Ergebnisse dann im Hauptthread posten können. alles mit nur wenigen Zeilen Code.

11. NetworkOnMainThreadException

Diese Ausnahme wird ausgelöst, wenn Ihre App versucht, Netzwerkvorgänge im Hauptthread auszuführen, z. B. das Senden von API-Anforderungen, das Herstellen einer Verbindung mit einer Remotedatenbank oder das Herunterladen einer Datei. Da Netzwerkoperationen zeit- und arbeitsintensiv sein können, blockieren sie mit hoher Wahrscheinlichkeit den Hauptthread, sodass Android 3.0 (Honeycomb) und höher diesen Fehler auslöst, wenn Sie versuchen, eine Netzwerkanfrage an den Hauptthread zu stellen.

Wenn Sie auf eine NetworkOnMainThreadException stoßen, suchen Sie den Netzwerkcode, der in Ihrem Hauptthread ausgeführt wird, und verschieben Sie ihn in einen separaten Thread.

Wenn Sie häufig Netzwerkanforderungen stellen müssen, sollten Sie sich Volley ansehen, eine HTTP-Bibliothek, die ihre eigenen Hintergrundthreads initiiert, sodass alle Netzwerkanforderungen standardmäßig vom Hauptthread ausgeführt werden.

12. Aktivität hat ein Fenster durchgesickert, das ursprünglich hier hinzugefügt wurde

Dieser Fehler tritt auf, wenn versucht wird, nach dem Beenden der Aktivität einen Dialog anzuzeigen. Wenn dieses Problem auftritt, öffnen Sie Ihre Aktivität und stellen Sie sicher, dass Sie den Dialog ordnungsgemäß schließen, indem Sie dismiss() entweder in der onDestroy()- oder onPause()-Methode Ihrer Aktivität aufrufen, zum Beispiel:

13. OutofMemoryError

Dieser Fehler tritt auf, wenn Ihre App eine Speicheranforderung stellt, die das System nicht erfüllen kann. Wenn Sie auf diese Fehlermeldung stoßen, schließen Sie zunächst alle häufigsten Fehler bei der Speicherverwaltung aus. Überprüfen Sie, ob Sie daran gedacht haben, alle Ihre Rundfunkempfänger abzumelden, und dass Sie alle Ihre Dienste gestoppt haben; Stellen Sie sicher, dass Sie keine Referenzen in statischen Membervariablen festhalten und nicht versuchen, große Bitmaps zu laden.

Wenn Sie alle offensichtlichen Ursachen für einen OutOfMemoryError ausgeschlossen haben, müssen Sie tiefer graben und genau untersuchen, wie Ihre App Speicher zuweist, da es wahrscheinlich einige Bereiche gibt, in denen Sie die Speicherverwaltung Ihrer App verbessern können.

Android Studio hat einen ganzen Bereich, der Ihnen bei der Analyse der Speichernutzung Ihrer App hilft. Wählen Sie also zunächst Ansicht > Tools-Fenster aus der Android Studio-Symbolleiste aus. An dieser Stelle sehen Sie je nach installierter Version von Android Studio entweder eine Android-Monitor- oder eine Android-Profiler-Option.

Wir haben bereits auf dieser Website über die Arbeit mit dem Memory Monitor gesprochen, aber da Android Profiler eine neue Ergänzung zu Android Studio ist, werfen wir einen kurzen Blick auf die wichtigsten Funktionen.

Wenn Sie Android Profiler öffnen, werden automatisch drei Informationen aufgezeichnet.

The Android Profiler tracks the apps CPU Memory and Network information automaticallyThe Android Profiler tracks the apps CPU Memory and Network information automaticallyThe Android Profiler tracks the apps CPU Memory and Network information automatically

Da wir daran interessiert sind, wie unsere App den Speicher verwendet, klicken Sie auf den Speicherbereich, um den Speicherprofiler zu starten.

Der Memory Profiler besteht aus einer Zeitleiste, die die verschiedenen Arten von Speicher anzeigt, die derzeit von Ihrer App zugewiesen werden, z. B. Java, Native und Stack. Oberhalb dieser Grafik finden Sie eine Reihe von Symbolen, mit denen Sie verschiedene Aktionen auslösen können:

  • Erzwingen Sie ein Garbage-Collection-Ereignis.
  • Machen Sie einen Hprof-Snapshot des Anwendungsspeichers. Dies ist eine Momentaufnahme aller Objekte im Heap Ihrer App, einschließlich der Art von Objekten, die Ihre App zuweist, der Anzahl der zugewiesenen Objekte und wie viel Speicherplatz diese Objekte belegen.
  • Speicherzuweisungen aufzeichnen. Indem Sie die Speicherzuweisungen Ihrer App beim Ausführen bestimmter Aktionen aufzeichnen, können Sie die spezifischen Vorgänge identifizieren, die zu viel Speicher verbrauchen.
The Memory Profiler displays the different kinds of memory your app is allocating The Memory Profiler displays the different kinds of memory your app is allocating The Memory Profiler displays the different kinds of memory your app is allocating

Um die Teile Ihrer Anwendung zu identifizieren, die für den OutOfMemoryError verantwortlich sind, verbringen Sie einige Zeit mit der Interaktion mit Ihrer App und überwachen Sie, wie sich die Speicherzuweisungen Ihrer App als Reaktion auf verschiedene Aktionen ändern. Nachdem Sie den Abschnitt Ihres Projekts identifiziert haben, der das Problem verursacht, verbringen Sie einige Zeit damit, ihn auf Speicherlecks sowie auf Ineffizienzen bei der Verwendung des Speichers zu untersuchen.

Abschluss

In diesem Artikel haben wir uns 13 der Fehlermeldungen angesehen, die Ihnen bei der Entwicklung für Android am wahrscheinlichsten begegnen. Wir haben all die verschiedenen Faktoren besprochen, die zu diesen Fehlern beitragen können, und die Schritte, die Sie unternehmen müssen, um sie zu beheben.

Wenn Sie von einer Fehlermeldung geplagt werden, die wir nicht behandelt haben, sollten Sie zunächst die gesamte Fehlermeldung in Google kopieren/einfügen, da dies oft Threads und Blog-Posts auftaucht, in denen die Leute über die Lösung diskutieren dieser spezielle Fehler.

Und wenn Sie nirgendwo im Web eine Lösung finden, können Sie sich jederzeit direkt an die Android-Community wenden, indem Sie Ihre Frage bei Stack Overflow posten.

Während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Entwicklung von Android-Apps!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.