Ich habe eine Launcher-App für Android mit Apache cordova geschrieben. Es ist für eine Kiosk-ähnliche Anwendung und im Grunde funktioniert es gut.
Leider gibt es ein Problem: Unter bestimmten Umständen tötet Android meine App und startet sie sofort neu. - Es dauert etwa 3 Sekunden, um zu laden, wo es einen weißen Bildschirm zeigt. Es beginnt komplett neu (onPause, onResume werden nicht aufgerufen). Im Protokoll finde ich:
%Vor%Die Umstände, unter denen es passiert:
Was ich bisher ohne Glück versucht habe:
Geräte, bei denen der Fehler auftritt:
Warum also tötet das Android auf den Tablets meine App? Liegt es daran, dass sie billige Hardware haben oder weil die Android-Versionen älter sind? Wie kann ich diesen Fehler verhindern?
AKTUALISIEREN
Ich habe herausgefunden, dass das Problem nicht auf die Programmierung zurückzuführen ist, da dieses Problem bei jeder App auftritt. Deshalb habe ich eine weitere Frage zu Android-Enthusiasten gestellt
Das Problem wurde durch Änderungen der Systemkonfiguration in Runtime verursacht. Standardmäßig werden Aktivitäten diese nicht behandeln, sondern nur neu starten.
Siehe Ссылка
Cordova fügt Handler für orientation
, keyboardHidden
, keyboard
, screenSize
und locale
standardmäßig hinzu.
Um unser Problem zu beheben, mussten wir nur hinzufügen, um die Konfigurationsänderung für navigation
an unsere Aktivität wie folgt anzupassen:
In den Geräten, die abstürzen, haben Sie aus irgendeinem Grund die Entwickleroption: Aktivitäten nicht markiert lassen.
Verwenden Sie Cordova-Plugins, die die Aktivitäten ändern?
Es sieht so aus, als ob eine Aktivität zerstört wird. Hier finden Sie einige Informationen:
Das ist bei allen Apps der Fall. Jede App, die in den Hintergrund getreten ist oder für einige Zeit nicht verwendet wird, setzt die virtuelle Engine auf niedrigere Priorität und wenn sie Speicher oder eine andere Ressource benötigt, wird die App beendet.
Sie können es nicht vermeiden. Was Sie tun können, ist einen Neustart an der gleichen Stelle, wo es getötet wurde mit onSaveInsanceState()
und onRestoreInstanceState()
:
onSaveInstanceState () und onRestoreInstanceState ()
Die andere Möglichkeit besteht darin, Ihrer App einen Dienst hinzuzufügen. Auf diese Weise wird Ihre App nicht getötet:
Wie können wir einen Dienst verhindern? wird von OS getötet?
Obwohl ich kein Experte für Android bin, sehe ich den Log in den folgenden Zeilen:
"java.lang.IllegalArgumentException: Angefordertes Fenster android.os.BinderProxy@427d8618 existiert nicht"
Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, eine System-API aufzurufen, die auf Ihrem Zielgerät nicht verfügbar ist. Deshalb ist dieses Problem, wie Sie sagten, abhängig vom Gerät. Dieses Problem führt auch dazu, dass die Anwendung wie beschrieben neu gestartet wird. Alles, was Sie herausfinden müssen, ist "Was ist dieser API-Aufruf, der Ihre App zum Absturz bringt"
Eine weitere interessante Sache, die ich in Ihrem Beitrag bemerkt habe, ist, dass dieser Absturz nur in no-name
product auftritt. Also ich glaube, No-Name könnte nur das Problem verursachen, wie während der Bluetooth-Paarung, intern BluetoothDevice.getName()
kann Null zurück, was zu dem Absturz.Ich glaube stark, dass dies das Problem verursacht und vorschlagen, dass Sie sich dies ansehen link für einige Hilfe.
Es ist kein Tablet oder mobiles Problem. Ich vermute, dass die Option Aktivitäten nicht beibehalten (Entwickleroptionen) auf Ihrem Tablet aktiviert ist. Bitte überprüfen Sie das.
Android 4.4.2 Tablet ("No-Name" Produkt) - Der Fehler ist vorhanden
Android 5.1-Tablet ("No-Name" -Produkt) - Der Fehler ist vorhanden
Tags und Links android cordova bluetooth android-5.1.1-lollipop android-4.4-kitkat