Bearbeiten von „Application not Responding“
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 1: | Zeile 1: | ||
'''Application not Responding''' (Abkürzung: '''ANR''' | '''Application not Responding''' (Abkürzung: '''ANR''') ist eine Fehlersituation, die durch eine Android-[[App]] verursacht werden kann. Diese Fehlersituation wird durch das Android-System festgestellt, wenn die App länger als eine definierte Zeit benötigt, um auf eine Benutzereingabe zu reagieren und somit die Benutzeroberfläche blockiert. | ||
Wenn das Android-System eine ANR-Situtation festgestellt hat, dann wird ein Dialog über die App gelegt, der den Nutzer darüber informiert, dass die App nicht reagiert. Dieser Dialog bietet dem Nutzer über zwei entsprechende Buttons an, die App entweder zu beenden oder nochmal einige Sekunden zu warten.<ref>{{Cite web | url = https://developer.android.com/guide/components/processes-and-threads.html#Threads | title = Processes and Threads | accessdate = 2016-06-25 | publisher = developer.android.com (Offifizielle Entwickler-Dokumentation für Android | language = en }}</ref> Auch wenn der Nutzer sich entscheiden kann, der App nochmal einige Sekunden Zeit zu geben, ist diese Fehlersitutation durch entsprechende Programmierung der App zu vermeiden. | Wenn das Android-System eine ANR-Situtation festgestellt hat, dann wird ein Dialog über die App gelegt, der den Nutzer darüber informiert, dass die App nicht reagiert. Dieser Dialog bietet dem Nutzer über zwei entsprechende Buttons an, die App entweder zu beenden oder nochmal einige Sekunden zu warten.<ref>{{Cite web | url = https://developer.android.com/guide/components/processes-and-threads.html#Threads | title = Processes and Threads | accessdate = 2016-06-25 | publisher = developer.android.com (Offifizielle Entwickler-Dokumentation für Android | language = en }}</ref> Auch wenn der Nutzer sich entscheiden kann, der App nochmal einige Sekunden Zeit zu geben, ist diese Fehlersitutation durch entsprechende Programmierung der App zu vermeiden. | ||
Zeile 8: | Zeile 8: | ||
* keine Reaktion zu einem Eingabe-Ereignis (zum Beispiel das Drücken einer Taste oder ein Touchscreen-Ereignis) innerhalb von 5 Sekunden | * keine Reaktion zu einem Eingabe-Ereignis (zum Beispiel das Drücken einer Taste oder ein Touchscreen-Ereignis) innerhalb von 5 Sekunden | ||
* ein <code>[https://developer.android.com/reference/android/content/BroadcastReceiver.html BroadcastReceiver]</code> wurde nicht innerhalb von 10 Sekunden beendet | * ein <code>[https://developer.android.com/reference/android/content/BroadcastReceiver.html BroadcastReceiver]</code> wurde nicht innerhalb von 10 Sekunden beendet | ||
== Technische Maßnahmen zur Vermeidung von ANR-Fehlern == | == Technische Maßnahmen zur Vermeidung von ANR-Fehlern == | ||
Langlaufende Operationen, wie aufwändige Berechnungen oder Zugriffe über das Internet, sind in einem Hintergrund-Thread auszuführen. Bei der Android-Programmierung mit der Programmiersprache [[Java]] steht hierbei u. a. die Klasse <code>[https://developer.android.com/reference/android/os/AsyncTask.html android.os.AsyncTask]</code> zur Verfügung. Diese Klasse hat u.a. die abstrakte Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#doInBackground(Params...) doInBackground(Params...)]</code>, die so zu überschreiben ist, dass die langlaufende Operation in ihr enthalten ist. Nach Aufruf der Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#execute(Params...) execute(Params...)]</code> an einer Instanz dieser Unterklasse wird diese Methode in einem Hintergrund-Thread ausgeführt. Sind nach Abarbeitung dieser Methode Ergebnisse auf der [[GUI]] der Android-App anzuzeigen, so können diese in der Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result) onPostExecute(Result)]</code> implementiert werden, welche im Main-Thread ausgeführt wird (der Zugriff auf die GUI aus einem Hintergrund-Thread heraus ist nicht zulässig und führt zur sofortigen Beendigung der App) | Langlaufende Operationen, wie aufwändige Berechnungen oder Zugriffe über das Internet, sind in einem Hintergrund-Thread auszuführen. Bei der Android-Programmierung mit der Programmiersprache [[Wikipedia:de:Java|Java]] steht hierbei u. a. die Klasse <code>[https://developer.android.com/reference/android/os/AsyncTask.html android.os.AsyncTask]</code> zur Verfügung. Diese Klasse hat u.a. die abstrakte Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#doInBackground(Params...) doInBackground(Params...)]</code>, die so zu überschreiben ist, dass die langlaufende Operation in ihr enthalten ist. Nach Aufruf der Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#execute(Params...) execute(Params...)]</code> an einer Instanz dieser Unterklasse wird diese Methode in einem Hintergrund-Thread ausgeführt. Sind nach Abarbeitung dieser Methode Ergebnisse auf der [[GUI]] der Android-App anzuzeigen, so können diese in der Methode <code>[https://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result) onPostExecute(Result)]</code> implementiert werden, welche im Main-Thread ausgeführt wird (der Zugriff auf die GUI aus einem Hintergrund-Thread heraus ist nicht zulässig und führt zur sofortigen Beendigung der App). | ||
== Einzelnachweise == | == Einzelnachweise == | ||
<references /> | <references /> |