2012-03-28 11 views
0

Hallo, ich habe eine lange laufende Android-App. Es ist für eine spezielle Situation, wo es keinen interaktiven Benutzer gibt. Es werden keine weiteren Apps gestartet, da kein Benutzer vorhanden ist. Aber ich sehe regelmäßig meine app Hauptaktivität des gesamten Lebenszyklus von Stop gehen durch, erstellen, Lebenslauf etc. ich eine Log-Datei geschrieben, wie es lief:Android - App-Aktivität gestoppt, aus unbekannten Gründen gestartet

 
2012.03.28 05:31 Main activity created 
2012.03.28 05:31 Main activity started 
2012.03.28 05:31 Main activity resumed 
2012.03.28 05:59 Main activity paused 
2012.03.28 05:59 Main activity created 
2012.03.28 05:59 Main activity started 
2012.03.28 05:59 Main activity resumed 
2012.03.28 05:59 Main activity stopped 
2012.03.28 06:12 Main activity paused 
2012.03.28 06:12 Main activity created 
2012.03.28 06:12 Main activity started 
2012.03.28 06:12 Main activity resumed 
2012.03.28 06:12 Main activity stopped 
2012.03.28 06:33 Main activity paused 
2012.03.28 06:33 Main activity created 
2012.03.28 06:33 Main activity started 
2012.03.28 06:33 Main activity resumed 
2012.03.28 06:33 Main activity stopped 
2012.03.28 08:08 Main activity paused 
2012.03.28 08:08 Main activity created 
2012.03.28 08:08 Main activity started 
2012.03.28 08:08 Main activity resumed 
2012.03.28 08:08 Main activity stopped 
... 

Wer weiß, warum? Vielen Dank.

Antwort

1

Android behält sich das Recht vor, alle Anwendungen oder Komponenten zu beenden, die für den Benutzer nicht sichtbar sind (auch solche, die getötet werden können, aber selten vorkommen). Meistens ist dies auf den Speicherdruck zurückzuführen, und das System tötet Anwendungen, um Ressourcen freizusetzen.

Wenn Sie einen lang laufenden Prozess haben, der im Hintergrund läuft und kontinuierlich ausgeführt werden sollte, ist es am besten, ihn zu foreground service zu machen. Dies wird dem Dienst eine höhere Priorität als einem Hintergrunddienst geben und sollte weniger vom System unterbrochen werden.

Wenn Ihr Dienst jedoch nicht im Vordergrund ausgeführt werden muss, sollten Sie Ihren Dienst so implementieren, dass er vom System abgerissen und aufgebaut wird, da er normalerweise den Dienst aus einem guten Grund beendet. Wenn Sie Ihren Dienst in den Vordergrund drängen, erhöht sich möglicherweise das Risiko, die Gesamtleistung des Geräts zu beeinträchtigen, und das Vorhandensein einer dauerhaften Benachrichtigung wird in der Benachrichtigungsleiste erzwungen, was einige Benutzer (zumindest mich) verärgert.

+0

Danke für deine Antwort Slothsberry. In diesem Fall ist es die einzige App auf dem Gerät. –

+0

Android kann (und wird immer, nach meiner Erfahrung) immer noch jede Anwendung beenden. Ich bin mir sicher, dass Sie damit umgehen können, aber meiner Erfahrung nach lohnt es sich nicht, das Betriebssystem und das Design des Frameworks zu bekämpfen, sondern stattdessen Ihre Implementierung anzupassen. Schließlich können Sie ihren Code nicht so einfach umschreiben, wie Sie Ihren schreiben könnten. –

1

Hört sich an, als würde das Betriebssystem Ihre Aktivität beenden, und Sie sollten es stattdessen als Dienst ausführen.

+1

Eigentlich können Hintergrunddienste vom System auch getötet werden. –