1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Thread oder Service?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von McFlow, 06.12.2010.

  1. McFlow, 06.12.2010 #1
    McFlow

    McFlow Threadstarter Android-Lexikon

    Beiträge:
    1,192
    Erhaltene Danke:
    358
    Registriert seit:
    30.09.2009
    Phone:
    LG G3
    Tablet:
    Nexus 7 (2013)
    So, ich bin noch recht neu was Android Entwicklung betrifft.

    Eine Activity meiner App soll von einer Website in einem bestimmten Intervall Informationen abrufen und dann ein paar TextViews dementsprechend aktualisieren.
    Das habe ich zunächst alles in den UI Thread gepackt. Das ist aber äußerst unkomfortabel, da erstens die GUI erst gezeigt wird, wenn die Infos abgerufen wurden und zweitens ist die GUI ja komplett geblockt ist während die Informationen abgerufen werden.
    Dann habe ich mal ein bisschen in dem Buch, was ich zum lernen benutze (Android 2 von Becker und Pant, sehr empfehlenswert finde ich;)) weitergelesen und bin auf Threads und Services gestoßen.
    Zuerst bin ich natürlich auf das Problem gestoßen, das ich keine Views aus dem Thread heraus aktualisieren kann :D
    Das ist aber im Android Dev Blog gut erklärt.
    Mein Plan ist es eigentlich, dass der Thread im Hintergrund endlos weiterläuft. (habe ich mittels while(true)... realisiertt). Wenn die App nun aber einige Zeit im Hintergrund ist oder das Smartphone im Standby ist wird der Thread scheinbar nach einiger Zeit gestoppt.
    Wenn ich mittels lange home drücken die App auswähle, dann läuft es manchmal noch meistens wird es aber komplett neu gestartet (sehe ich daran, das die TextViews, die aktualisiert werden sollen ursprünglich leer sind.)
    Ich plane auch noch ein Widget zu programmieren, dass auf diese Informationen zugreifen soll.
    Jetzt die Frage: Ist es möglich den Thread irgendwie "unsterblich" zu machen? Ich weiß nicht genau warum er beendet wird. Ich gehe mal vom Speicher aus, obwohl meistens noch um die 14mb frei sind, wenn das passiert. Diese Option würde ich nach Möglichkeit mittels Settings an-/abschaltbar implementieren.
    Ist der Thread dafür überhaupt die richtige Wahl?
     
  2. Unicate, 06.12.2010 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Kann man, die Lösung heisst RemoteService. Thread ist nicht die richtige Wahl, da er die Activity nicht überlebt.

    Dem RemoteService kann man auch einen Callback basteln, welcher die View aktualisiert, falls sie gerade aktiv ist. Wichtig hierbei ist, das der remote service mit "startService()" gestartet wird (hatte ich mich dämlich gesucht), da er sonst gekillt wird, falls speicher benötigt wird.
    Nachdem du startService aufgerufen hast, sollte dich Activity meines Wissens sich selbst verbinden. (Hab ich auch gestaunt, aber lief soweit)

    mit bind und auto_create (oder so ähnlich) wird der Service zwar im Hintergrund gelassen, aber wird "Vogelfrei" sobald keine activity mehr aktiv mit dem Service verbunden ist.
     
    Zuletzt bearbeitet: 07.12.2010
    McFlow bedankt sich.
  3. ko5tik, 07.12.2010 #3
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Keins von anderen - es sei denn, du willst das die Batterie leer geht und deine Anwendung mit dem Taskmanager gekillt wird (und dann deinstalliert)

    Verwende lieber Broadcast-Receiver, periodisch, nur wenn Anwndung gestartet ist.
    Kein Starten on Boot, kein starten wenn Telefon schläft (ok, das wäre zu diskutieren)

    Das was du gerade machst ist no-go
     
  4. ramdroid, 07.12.2010 #4
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    Daten die für die UI erforderlich sind, sollten auch nur aktualisiert werden wenn die UI auch sichtbar ist... was bringt es sonst auch?
     
  5. Unicate, 07.12.2010 #5
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Er hatte gefragt, ob er einen Prozess unsterblich machen kann. Dafür ist der RemoteService da.
     
  6. ko5tik, 07.12.2010 #6
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    er hat gefragt, wie er am Besten periodisch die Infos abruft - dafür ist BroadcastReceiver da
     
  7. McFlow, 12.12.2010 #7
    McFlow

    McFlow Threadstarter Android-Lexikon

    Beiträge:
    1,192
    Erhaltene Danke:
    358
    Registriert seit:
    30.09.2009
    Phone:
    LG G3
    Tablet:
    Nexus 7 (2013)
    Das leuchtet ein, stimmt. Später sollen die Infos ja noch in einem Widget angezeigt werden. Bei Veränderungen soll bei Bedarf eine Benachrichtigung ausgegeben werden.

    Den Prozess "unsterblich" zu machen wäre die äußerste dreckige Notlösung gewesen. Android killt den sicher nicht umsonst.

    Scheint so ziemlich das zu sein, was ich brauche. Das schaue ich mir mal im Detail an.

    Ich bin halt was App/Software Entwicklung angeht noch recht neu. Daher bin ich für alle Denkanstöße dankbar;)
     
  8. ko5tik, 13.12.2010 #8
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Ein laufender Service ist der beste Weg den Akku leer zu lutschen und von dem Gerät geschmissen zu werden
     

Diese Seite empfehlen