Thread oder Service?

McFlow

McFlow

Dauergast
379
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?
 
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:
  • Danke
Reaktionen: McFlow
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
 
Daten die für die UI erforderlich sind, sollten auch nur aktualisiert werden wenn die UI auch sichtbar ist... was bringt es sonst auch?
 
Er hatte gefragt, ob er einen Prozess unsterblich machen kann. Dafür ist der RemoteService da.
 
er hat gefragt, wie er am Besten periodisch die Infos abruft - dafür ist BroadcastReceiver da
 
ramdroid schrieb:
Daten die für die UI erforderlich sind, sollten auch nur aktualisiert werden wenn die UI auch sichtbar ist... was bringt es sonst auch?
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.

Er hatte gefragt, ob er einen Prozess unsterblich machen kann. Dafür ist der RemoteService da.
Den Prozess "unsterblich" zu machen wäre die äußerste dreckige Notlösung gewesen. Android killt den sicher nicht umsonst.

er hat gefragt, wie er am Besten periodisch die Infos abruft - dafür ist BroadcastReceiver da
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;)
 
Ein laufender Service ist der beste Weg den Akku leer zu lutschen und von dem Gerät geschmissen zu werden
 

Ähnliche Themen

A
Antworten
1
Aufrufe
637
swa00
swa00
W
  • waltsoft
Antworten
3
Aufrufe
723
waltsoft
W
W
  • waltsoft
Antworten
4
Aufrufe
938
waltsoft
W
Zurück
Oben Unten