Sie müssen den Hintergrundservice mit dem START_STICKY-Befehl ausführen. Erweitert einfach den Service und überschreibt onCommand wie folgt:
%Vor%So wird Ihr Dienst neu gestartet, wenn es in der Nähe ist (nach System oder irgendetwas anderem)
Sie müssen jetzt nur Ihren Dienst überprüfen (onCreate zum Beispiel), ob die Anwendung läuft oder nicht und sie erneut starten, wenn nicht. Ich nehme an, PackageManager lässt Sie das überprüfen oder einfach einen statischen booleschen is_alive verwenden, um zu sehen, ob Ihre Aktivität immer läuft.
Grüße Jim
Fehler in Android 2.3 mit START_STICKY
Ich musste einen Dienst mit all meinen Kräften am Leben erhalten. Wenn der Dienst jederzeit ausgeführt wird, können Sie die Benutzeroberfläche aufrufen.
%Vor%es wird neu gestartet.
Die App kann nicht deinstalliert werden, da sie über einen Geräteadministrator verfügt.
Es ist eine Art der elterlichen Kontrolle, der Benutzer weiß, dass es da ist. Sie können den Geräteadministrator nur entfernen und deinstallieren, aber durch das Entfernen von Device Admin wird das Telefon wie bei Kaspersky gesperrt.
Es gibt eine Menge von Braodcast-Empfängern, wie zB boot-finished, user presen, screen on, screen off ..., viele andere, alle starten den Dienst, Sie können es auch mit UI tun. Oder im Service überprüfen, ob Ihre Aktivität am Leben, sichtbar, wenn nicht, dann pop.
Ich hoffe, Sie werden mit gutem Grund die Info nutzen!
Bearbeiten: Dienstcode-Snippet neu starten:
%Vor%Edit2: fügen Sie spippet hinzu, um zu überprüfen, ob der Dienst in ... einer Ladung von Broadcasts läuft
%Vor%Edit3 anderer Service-Start:
%Vor%Vergessen Sie nicht Android 2.3 Fehler: Machen Sie die Logik für die Initialisierung in
%Vor%und nicht in:
%Vor%Wenn Sie sich den offiziellen Produktquellcode von Google IO ansehen, habe ich Folgendes gefunden:
%Vor%Sie können einen Sticky-Dienst starten und einen Alarm-Manager registrieren, der immer wieder überprüft, ob Ihre Anwendung aktiv ist, andernfalls wird sie ausgeführt.
Sie können auch einen Empfänger erstellen und für <action android:name="android.intent.action.BOOT_COMPLETED" />
registrieren, dann können Sie Ihren Dienst von Ihrem Empfänger aus starten. Ich denke, es sollte einige Broadcast-Nachricht sein, wenn OS oder tötet einige Dienste / Anwendungen.
Nur um Ihnen eine grobe Vorstellung zu geben, habe ich dies und seine Arbeit getan 1) Empfänger registrieren Empfängercode:
@Override public void onReceive (Kontextkontext, Absichtsabsicht) {
%Vor%Servicecode:
%Vor%Ich bevorzuge nichts in onStartCommand, weil es jedes Mal aufgerufen wird, wenn Sie den Dienst starten, aber onCreate wird nur zum ersten Mal aufgerufen, wenn der Dienst gestartet wird, also mache ich den Großteil des Codes in onCreate, so dass mir das Wetter nicht wirklich wichtig ist Dienst läuft bereits oder nicht.
Laut @RetoMeyer von Google besteht die Lösung darin, die App "sticky" zu machen.
Dazu müssen Sie START_STICKY in Ihrem Intent-Service-Management einrichten.
Überprüfen Sie diese Referenz von Entwickler Android
Ja, sobald das Problem mit dem Speicher zu niedrig ist, startet android os die Anwendung, um den benötigten Speicher zu ersetzen. Mit Diensten, die Sie erreichen können, sollte Ihr Dienst parallel zu Ihrer Anwendung ausgeführt werden, aber in einigen Fällen wird sogar Ihr Dienst gleichzeitig beendet. Nach dem Töten, wenn genügend Speicher vorhanden ist, versuchen Sie, die Anwendung nicht in allen Fällen neu zu starten. Schließlich gibt es keine feste Regel, um Ihre Anwendung wieder aufzurufen, sobald sie von os in allen Fällen getötet wurde, die von os und internen Verhaltensweisen abhängt.
Tags und Links android taskmanager