Wie verwende ich eine Service?

  • Hallo,


    Ich habe eine Frage über Services. Ich habe das Thema nicht ganz verstanden. Ich habe gedacht, dass ihr mir einen Weg zeigen könnt. Ich habe ein Projekt, wo ich eine Haupt-Activity habe und da eine Service starte und an diese Service binde. Bis jetzt gibt es kein Problem. Service ist zuständig für Internet-Kommunikation. Ich möchte, dass bestimmte Methode in der Service aktiviert werden, wenn der Anwender entsprechende Buttone drückt. Ich weiß schon wie ich diese mit EventListener arbeiten kann. Ich kann auch die Methode in Service in onCreate (vom Service) aktivieren. Bei mir fehlt der Angriff von der Activity an den Methoden (sie sind natürlich public) der Service. Kann ich nicht sie einfach in der Art myService.doSomething(); verwenden?

  • Also ein Service ist eig. dafür da, dass andere Apps mit deiner kommunizieren können bzw. Dinge selbstständig im Hintergrund laufen können, die dann wiederum irgendwie deine Activity auslösen. Die Call-Hierarchie ist also normalerweise andersrum als du das beschreibst. Wenn du irgendwas Konkretes im Service aus deiner Activity aufrufen willst, kannst dus in der Regel auch über AsyncTasks oder sowas direkt da lösen.
    Was soll dein Service denn tun?

  • Mit Service.ConnectToServer(); soll mein Service an einem Server (übers Internet) verbinden. Wenn der Anwender ein Button drückt, schickt Service ein Data zum Server und wartet auf Data vom Server. Wenn Data vom Server kommt, dann soll manchmal der Anwender (je nach Data) informiert werden (hier soll mein Service irgendwelche Methoden im Activity aktivieren). Im Service selbst wird die Verbindung mit dem Server in einem separaten Thread gemacht. Eigentlich wird die ganze Kommunikation mit dem Server in einem separaten Threads gemacht. Ich schaffe alles bis auf die Kommunikation mit dem Server. Wenn ich eine Methode vom Activity im Service starte (z.B. Service.ConnectToServer();) muss diese Methode im Service laufen und nicht im Activity. (Also dieser Prozess soll Activity nicht beeinflussen (im Sinne von Resourcen)). Ich weiß aber nicht wie ich das genau schaffen kann?

  • Hmm also ich würde da jetzt im onStartCommand des Service zwei AsyncTasks starten. Einen, der die Verbindung herstellt und einen, der auf Antwort lauscht, der dann wieder die Activity benachrichtigen kann.
    Ein Service ist übrigens kein eigener Prozess oder Thread, sondern vereinfacht gesagt nur der Teil der Anwendung, der nicht vom OS abgeschossen wird, wenn er mal gestartet wurde. Wenns um die das Beeinflussen von Resourcen geht musst du das über irgendne Threading-Lösung nochmal selber einbauen.

  • Ich verwende meine Service eigentlich genau für diesen Zweck. Es muss im Hintergrund laufen auch wenn meine Activity geschlossen wurde. Die Verbindungen stelle ich mit Threads her. Aber was ist der Unterschied, wenn ich die mit den AsyncTask herstelle? (laufen die Methode, die die Verbindungen herstellen nicht im Hintergrund, wenn ich sie von der Activity erreiche?)


    Das was ich eigentlich fragen wollte, wie soll ich eigentlich die Prozeesse im Service starten und die Methode im Activity vom Service starten? Also wenn eine Information vom Server geschickt wird, muss diese Information vom Service empfangen. Dann im Activity gezeigt werden. Ich habe an Listeners gedacht aber ich bin mir nicht sicher, weil Services für Android typisch sind. Außerdem wenn Anwender ein Button "drückt", muss eine Information zum Server geschickt werden. Dafür gibt es public sendData Methode im Service. Aber ich weiß nicht, ob das die richtige Art und Weise ist?

  • Threads sind halt etwas komplizierter als AsyncTasks. Letztere sind nur nen vereinfachter Wrapper für Threads.
    Zur richtigen Frage: ehrlich gesagt keine Ahnung so richtig. Ich hab bis jetzt noch nie so mit Threads kommuniziert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!