Normalerweise verlässt meine Anwendung durch den Aufruf:Warum wird die Anwendung manchmal bei killProcess neu gestartet?
android.os.Process.killProcess(android.os.Process.myPid());
führt auch ohne Zwischenfälle.
Aber ab und zu wird die Anwendung neu gestartet (nach dem Beenden!).
Die entsprechende Protokoll Schnipsel zeigt:
.631: I/Process(15495): Sending signal. PID: 15495 SIG: 9
.641: W/AudioFlinger(121): write blocked for 252 msecs, 1279 delayed writes, thread 0xdc18
.651: I/ActivityManager(164): Process com.ef.myapp (pid 15495) has died.
.651: I/WindowManager(164): WIN DEATH: Window{463659e8 com.ef.myapp/com.ef.myapp.MainActivity paused=false}
.661: I/AudioService(164): AudioFocus abandonAudioFocus() from [email protected]
.701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}
Ich weiß, dass, durch das Design des Android OS, killProcess() nicht der richtige Weg ist, um eine Anwendung zu beenden. Das liegt daran, dass killProcess() den Prozess immediately stoppt, ohne irgendeinen Weg oder eine Chance zu geben, dass die App dies verhindert oder sich darauf vorbereitet.
Ich weiß, dass, wenn ich finish() aufrufen, der Anwendungsstapel nur in den Hintergrund geschoben wird (und noch im Speicher vorhanden ist). Android selbst entscheidet, wann die Anwendung geschlossen wird (d. H. Ihre Instanz aus dem Speicher entfernt) und im Allgemeinen wird dies getan, wenn die Anwendung "die älteste, die am längsten nicht verwendet wird" wird. Sein Verhalten ist tatsächlich vorhersehbarer, wenn es wirklich die last one ist.
Das Problem ist, dass finish() stoppt nur und zerstört die Aktivität, für die es aufgerufen wurde. Es stoppt nicht andere Aktivitäten, die durch die Anwendung oder andere Aktivitäten hervorgebracht werden. Also, für die Leichtigkeit des Tests & Debug während der Entwicklung, verwende ich killProcess() als bequeme Verknüpfung.
Aber jetzt sehe ich, dass dies den Nebeneffekt der Anwendung hat manchmal Neustart unmittelbar nach selbst zu töten - all innerhalb von 30 Millisekunden.
Eine einfache Lösung wäre, alle Aktivitäten der Anwendung iterieren und finish() ihnen. Aber bevor ich damit fortfahre, möchte ich verstehen, was in der Android-OS macht eine Anwendung wieder auferstehen.
Warum würde Android eine getötete Anwendung neu starten?
Und warum inkonsistent? (d. h. manchmal)
Sie haben Empfänger mit Intent-Filtern gesendet, die im Manifest registriert sind? Das würde dazu führen, dass deine App startet. –