Android lifecycle: Onsaveinstancestate bei TCP Socket Server

R

Rowenta

Neues Mitglied
Threadstarter
Hallo zusammen,

ich habe eine App entwickelt, welche einen TCP Socket Server startet, sobald die App geöffnet wird.
Dies funktioniert auch ohne Probleme, solange die Activity vom Lifecycle nicht destroyed wird.

Meine Frage:
Kann mir jemand sagen, welche Werte ich mithilfe der Onsaveinstancestate Methode übergeben muss, um den TCP Socket Server bei einem Activitywechsel, etc. weiterhin am Leben zu erhalten?

Normale Datentypen: String, int,... kann ich ohne weiteres mit dieser Methode übergeben, doch ich finde nicht heraus wie ich z.b. den Datentyp Socket übergeben kann...

Vielen Dank im Voraus!

Viele Grüße
 
swa00

swa00

Moderator
Teammitglied
Hallo Rowenta,

was spricht denn gegen eine ausgelagerte eigene SingleTon, die deine TCP Verbindung handelt und mittels Listener deine Daten an die verschiedene Activities gibt.

Die Übergabe eines Sockets erscheint mir da eher die schlechteste Variante.
 
R

Rowenta

Neues Mitglied
Threadstarter
Hallo swa00,

Vielen Dank das hört sich interessant an!
Mit dem Auslagern von code und auch mit einer Singleton hab ich mich noch nicht befasst.
Läuft dieser Code dann nicht im Lifecycle?
 
swa00

swa00

Moderator
Teammitglied
Läuft dieser Code dann nicht im Lifecycle?
Alles läuft im LifeCycle , aber das "Problem" was du hast ist nicht der LifeCycle sondern dein Verständnis vom Progammaufbau.
Ich würde dir an dieser Stelle anraten , dich erst mit den Grundlagen auseinander zu setzen ,
bevor du so etwas recht "fortgeschrittenes umsetzt.

Das ,was ich Dir oben empfohlen habe ist eigentlich die Basis - die sollte erst sitzen
 
J

jogimuc

Erfahrenes Mitglied
Hi mit dem ausgelagerten Code als Singelton ist das so.

Du holst ja in der ersten Activity eine Instanz deiner Klasse TCP-Socket . Ist diese noch nicht erstellt macht das die Sinelton Klasse selber und gibt dir die Instanz zurück.

Nun ist es bei Singelton so das du nicht selber die Instanz mit new erstellst sonder dir ich sage mal die Instanz dir von der Klasse selber zurückgeben läst.
Da es bei Singelton nur eine Instanz einer Klasse geben kann.
Bekommst du auch in der neuen Activity die gleiche Instanz auf deine Klasse TCP-Socket und kannst somit auf die gleichen Variablen und Inhalte zugreifen, wie in der ersten Activity.

Du brauchst somit das Socket nicht übergeben denn du hast es ja in der Klasse Gespeichert.

Auch ein Vorteil ist das du den Code nicht doppelt schreiben musst . Du kannst zb. eine Methode zum senden von Daten in der Klasse haben und in jeder Activity nutzen über die Instanz. Ohne ausgelagerten Code müsstest du ja in jeder Activity den Code neu schreiben.

Muster: Java: Singleton – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher
 
Zuletzt bearbeitet:
markus.tullius

markus.tullius

Experte
Singelton ist eher bei Android ein Antpatter. Das liegt daran das die Activitys in einen eigenen Threads eingebettet sind. Das ist auch einer der Gründe, warum Android soetwas wie der Lifecycle hat.

Das zweite Problem, welches ich sehe ist der offene TCP-Socket. Dafür muss das WLAN-Modul des Handy immer im activen Modus sein, Dies leert den Akku sehr schnell.

Meine Frage, die ich hätte, brauchst du wirklich eine permanenten offen TCP-Socket? Wenn du einfach nur Message austauschen willst, bietet sich zum Beispiel auch Websockets an.
Learn to use WebSockets on Android with OkHttp – Sylvain Saurel – Medium
 
Oben Unten