1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. Yothri, 23.05.2018 #1
    Yothri

    Yothri Threadstarter Android-Hilfe.de Mitglied

    Hallo,

    in meiner Applikation kann ich auf einem Button Klick einen Vordergrund Dienst starten, welcher einen anderen Thread ausführt und dort solange läuft, bis eine Variable auf false gesetzt wird. Diese wird in der OnDestroy bisher auf false gesetzt. Rufe ich also StopService auf, läuft der Thread nicht mehr weiter.

    Wie aber kann ich detektieren ob der Service gerade läuft? Ich will z.B. den Start Button nur Enabled haben, wenn der Service gerade nicht läuft. Genauso mit dem Stopp Button, der soll nur enabled sein wenn der Service gerade läuft.

    Wenn ich meine Applikation im Recents-Menü z.B. wegwische, dann läuft der Service mittlerweile weiter, das ist gut so, ich möchte dann aber wenn ich die App wieder starte, dass direkt Stop Enabled und Start Disabled ist. Ihr versteht bestimmt wie ich das meine.

    Ich arbeite unter Xamarin, aber von der Architektur her sollte es ja dasselbe sein.

    Danke im Voraus

    Grüße
     
  2. Kardroid, 24.05.2018 #2
    Kardroid

    Kardroid Android-Experte

    Hi, wie wäre es mit einem SharedPreference, welchen du mit dem jeweiligen Status setzt?

    Bessere Erklärung:
    Deine "false"-Variable speicherst du in einer SharesPreference und lädst sie beim Starten der App wieder und zeigst dann den Button an, oder eben nicht.
     
  3. Yothri, 24.05.2018 #3
    Yothri

    Yothri Threadstarter Android-Hilfe.de Mitglied

    Hi @Kardroid und danke für deine Antwort.
    Das wäre tatsächlich eine Möglichkeit daran habe ich noch nicht gedacht, allerdings ist es auch nicht sonderlich sicher oder? Falls die App mal abstürzt und den Status in der SharedPreference nicht mehr aktualisiert, kann ich beim nächsten Mal starten der App den Service nicht mehr starten. :/
     
  4. deek, 24.05.2018 #4
    deek

    deek Android-Experte

    ActivityManager  |  Android Developers
    Ist im aktuellen Android zwar deprecated, liefert aber immer noch die eigenen Services zurück, was für dich ja reichen würde....
    Dort in der Liste nachschauen ob dein gesuchter Service läuft.
     
  5. Yothri, 24.05.2018 #5
    Yothri

    Yothri Threadstarter Android-Hilfe.de Mitglied

    @deek Danke, ich wusste auch das es die Möglichkeit über die veraltete Methode gibt, aber ich wollte gleich an die Zukunft denken weil es ja irgendwann dann nicht mehr geht. Was würde passieren, wenn man einen nicht gestarteten Service binden würde. Kann man darüber nicht irgendwie rausfinden ob es eine Service Instanz gibt?
     
  6. deek, 25.05.2018 #6
    deek

    deek Android-Experte

    Ein bind startet automatisch den Service.
    Du könntest noch einen Ping Mechanismus selbst bauen.
    Ein Intent per LocalBroadcastManager schicken, dass ein im Service registrierter Receiver auffangen würde. Dieser würde wiederum ein "alive" Intent zurück schicken.
    Dann hast du etwas Versatz und der Check ist asynchron, du musst dich aber nicht auf veraltete Schnittstellen oder gesharete Variablen verlassen. Wenn der Service antwortet schaltest du den Button um, wenn nicht halt nicht.
     
  7. markus.tullius, 26.05.2018 #7
    markus.tullius

    markus.tullius Android-Lexikon

    Falscher Ansatz,

    Dein Weg funktioniert nur für Android 7.0 und kleiner problemlos.

    Hier ein Dokument von Microsoft. Erstellen von Android-Diensten - Xamarin
    Such mal nach den Kapitel "Hintergrund Ausführung Grenzwerte bei Android 8.0"

    Und zum Thema Thread schau mal in die Doku:
    Thread Class - Xamarin

    Hier gelten die Regel von Java, also muss du den Thread mit interrupt() und isInterrupted() beenden, oder ihn schön zu ende laufen lassen. Alles andere führt nur zur ANR o. Memoryleaks.

    Und bevor ich es vergesse. Xamarin ist nur für einfache Projekte eine wirkliche Alternative. Für komplexere Projekte muss du Ahnung von der nativen Programmierung haben. Und meine Erfahrung ist, dass es dann schneller geht, wenn du nativ programmierst. ;)
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Service stoppt wenn App geschlossen wird Android App Entwicklung 16.05.2018
[OFFEN] Android 8 Service im Hintergund Android App Entwicklung 06.12.2017
[ERLEDIGT] Probleme mit Service unter Android N Android App Entwicklung 16.07.2017
Du betrachtest das Thema "Detektieren ob der Anwendungseigene Service läuft" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.