2010-11-28 19 views
2

Ich habe einen Thread, der auf eine TCP-Verbindung wartet. Wenn eine Verbindung hergestellt wird, möchte ich grundsätzlich anhalten, was die aktuelle Aktivität tut, und zu einer anderen Aktivität wechseln, die verschiedene Threads ausführt und ein anderes Layout anzeigt.Erhalten der aktuellen Aktivität von Thread

Für jetzt möchte ich auch diesen Thread laufen lassen (warten auf eine TCP-Verbindung).

Ich kann die Aktivität von einem zu einem anderen mit startActivity() auf einen Intent ändern, aber das funktioniert nicht innerhalb meines Threads.

Wie kann ich dieses Verhalten erreichen?

Vielen Dank,

James

Antwort

5

Faustregeln von langlaufende Aufgabe Programmierung in Android. Wenn Sie:

  1. Ein kurzer Lauf Aufgabe (Thread), die nur zu einer Zeit von einer Aktivität verwendet wird, dann AsyncTask verwenden.

  2. Eine lang andauernde Aufgabe, die den Lebenszyklus der Aktivität überleben sollte und/oder von mehreren Aktivitäten (auch außerhalb Ihrer App) verwendet wird, als Service verwenden. Der Dienst ist ein separater Prozess, der gegenüber Abschaltungen resistenter ist als Aktivität.

  3. Eine Aufgabe, die aufgrund einiger externer Bedingungen ausgeführt werden muss: Standort geändert, Netzwerk verfügbar usw. Oder wenn Sie eine periodische Datensynchronisierung oder eine Timer-basierte Aufgabe benötigen, brauchen Sie keine Task läuft, registrieren Sie einfach Ihren Code mit einer geeigneten API, und das Betriebssystem wird es aufrufen, wenn es angemessen ist. Dies wird als asynchrone Programmierung bezeichnet und ist die bevorzugte Option unter Android, da es die Speicher- und Prozessornutzung minimiert, indem nur Code aufgerufen wird, wenn dieser aufgerufen werden muss.

+0

Vielen Dank für diese Erklärung, das ist sehr nützlich. Ich brauche dann einen Service oder eine API (2 oder 3). Ich bin mir nicht sicher, ob es eine API gibt, die auf eine TCP-Verbindung warten kann. Weißt du bitte, wie ich das herausfinden kann? Danke sonst! Sehr hilfreich! – James

+0

Kann ein Dienst eine Aktivität laden? Mein Dienst würde für immer auf eine TCP-Verbindung warten. Wenn dies passiert, wird eine Aktivität, die ein UDP-Paket empfängt und sendet, gestartet (es hat auch ein eigenes Layout). Würde das bitte funktionieren? – James

+0

Müssen Sie die TCP-Verbindung ständig öffnen, auch wenn die App im Hintergrund ist? Dies wird Batterie entladen und möglicherweise teuer im Mobilfunknetz sein. –

Verwandte Themen