Application not Responding: Unterschied zwischen den Versionen

Neuer Abschnitt: Technische Maßnahmen zur Vermeidung von ANR
K (Bindestrich eingefügt)
(Neuer Abschnitt: Technische Maßnahmen zur Vermeidung von ANR)
Zeile 3: Zeile 3:
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.


Eine solche Fehlersitaution entsteht meist dadurch, dass die App in der Event-Handler-Methode (Ereignisbehandlungs-Methode) eines [[GUI]]-Elements (z.B. Button) Programmcode ausführt, der mehrere Sekunden zur Abarbeitung benötigt (z.B. aufwändige Berechnung oder I/O-Zugriff, besonders beim ''Internet''-Zugriff). Solche Event-Handler-Methoden werden vom sog. Main-Thread ausgeführt, der u.a. auch für die Aktualisierung der GUI sowie die Abarbeitung von GUI-Ereignissen zuständig ist. Da es nur einen Main-Thread gibt, blockiert die GUI, wenn der Main-Thread eine Event-Handler-Methode ausführt, die mehrere Sekunden zur Abarbeitung benötigt.<ref>{{Cite web | url = https://developer.android.com/training/articles/perf-anr.html| title = Keeping Your App Responsive | accessdate = 2016-06-25 | publisher = developer.android.com (Offifizielle Entwickler-Dokumentation für Android | language = en }}</ref>
Eine solche Fehlersituation entsteht meist dadurch, dass die App in der Event-Handler-Methode (Ereignisbehandlungs-Methode) eines [[GUI]]-Elements (z.B. Button) Programmcode ausführt, der mehrere Sekunden zur Abarbeitung benötigt (z.B. aufwändige Berechnung oder I/O-Zugriff, besonders beim ''Internet''-Zugriff). Solche Event-Handler-Methoden werden vom sog. Main-Thread ausgeführt, der u.a. auch für die Aktualisierung der GUI sowie die Abarbeitung von GUI-Ereignissen zuständig ist. Da es nur einen Main-Thread gibt, blockiert die GUI, wenn der Main-Thread eine Event-Handler-Methode ausführt, die mehrere Sekunden zur Abarbeitung benötigt.<ref>{{Cite web | url = https://developer.android.com/training/articles/perf-anr.html| title = Keeping Your App Responsive | accessdate = 2016-06-25 | publisher = developer.android.com (Offizielle Entwickler-Dokumentation für Android) | language = en }}</ref>


Android überwacht das Reaktionsverhalten durch die System-Dienste ''Activity Manager'' und ''Window Manager''. Ein ANR-Dialog wird angezeigt, wenn eine der folgenden Bedingungen erfüllt ist:
Android überwacht das Reaktionsverhalten durch die System-Dienste ''Activity Manager'' und ''Window Manager''. Ein ANR-Dialog wird angezeigt, wenn eine der folgenden Bedingungen erfüllt ist:
* 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 ==
Langlaufende Operationen wie aufwändige Berechnungen oder Zugriffe über Internet sind in einem Hintergrund-Thread auszuführen. Bei der Android-Programmierung mit der Programmiersprache [[Java]] steht hierbei u.a. die Klasse ''android.os.AsyncTask''<ref>{{Cite web | url = https://developer.android.com/reference/android/os/AsyncTask.html | title = API-Dokumentation der Klasse ''android.os.AsyncTask'' | accessdate = 2016-06-25 |  publisher = developer.android.com (Offizielle Entwickler-Dokumentation für Android) | language = en}}</ref> zur Verfügung.


== Einzelnachweise ==
== Einzelnachweise ==
<references />
<references />
Autopatrol, Moderator
1.304

Bearbeitungen