2017-09-28 5 views
2

Ich entwickle eine Anwendung in Android Studio, und ich muss den Speicherort des Geräts speichern, habe ich eine "locationService" -Klasse, die Service erweitert, so ist der Standort auf meinem Server und dem Dienst segmentiert wäre im Hintergrund. Ich habe die Android-Dokumentation gelesen und es gibt zwei Arten von Dienst (Dienst und verknüpften Dienst), ich verwende den verknüpften Dienst, da ich die Standortdaten in einer Aktivität anzeigen muss.Android App im Hintergrund

Das Problem ist, wenn ich die Anwendung schließe, der Dienst stirbt und nicht die Änderung des Standorts aufzeichnet.

Wie kann ich verhindern, dass der verknüpfte Dienst abstürzt? Danke

+0

Bitte beachten Sie dies. https://stackoverflow.com/a/3856940/6759520 – amuyu

Antwort

0

Ich nehme an, du meinst ein "gebundenes" Service, kein "verbundenes" Service. Eine Grenze Service wird nicht mehr ausgeführt, wenn der letzte Client die Verbindung trennt. Um dies zu verhindern, müssen Sie startService() anrufen und sicherstellen, dass Sie START_STICKY von onStartCommand() in Ihrem Service zurückgeben.

Sie müssen kein "gebundenes" Service verwenden, um Daten vom Service an ein Activity zu übergeben. Eine andere Möglichkeit ist, Ihre Service senden Sie die Daten (durch Hinzufügen der Daten als "extra" zu einem Intent und sendBroadcast() mit dem Intent aufrufen). Ihre Activity kann dann eine BroadcastReceiver einrichten, um für jede Daten Braodcast von Ihrem Service zu hören.

+0

Danke. Der richtige Begriff ist Bundle, ich habe es bereits in meiner Anwendung implementiert und es funktionierte korrekt, jetzt möchte ich eine andere Funktionalität implementieren, wenn ich im Hintergrund eine Aktivität starten und die gewünschten Informationen anzeigen kann, aber wenn ich die Anwendung minimieren (drücken Sie Das Haus und ich schließe es nicht, und ich sende Ihnen neue Informationen und ich möchte meine Anwendung in den Vordergrund stellen und diese Information zeigen. –

+0

Ich nehme an, du meinst "gebunden", nicht "Bundle". Wenn Sie Ihre App in den Vordergrund bringen möchten, rufen Sie einfach einen "Launch Intent" für Ihre App auf und rufen Sie 'startActivity()' damit auf. Es bringt Ihre App in den Vordergrund, damit Sie machen können, was Sie wollen. Siehe https://stackoverflow.com/a/14137045/769265 –

+0

Vielen Dank. Ich habe diese Methode implementiert und es hat funktioniert, jetzt habe ich ein anderes Problem, in meinem Dienst habe ich eine boolesche Variable, die mit einem Wert von true beginnt, und von meiner Anwendung befehle ich es auf falsch zu ändern, aber wenn ich schließe Anwendung, etwas geschieht der Dienst als Neustart und meine Variable kehrt auf den Anfangswert zurück (wahr). Es gibt eine Möglichkeit, dass mein Dienst nicht "neu gestartet" wird. –

Verwandte Themen