Hallo,
ich habe bisher wenig Java Erfahrung, und bin mir nicht sicher, ob ich nicht was falsch gemacht habe.
Ich habe eine Main Activity mit einem onClickListener für einen Button.
Wenn der Button geklickt wird, möchte ich ein kurzes Textkommando per TCP/IP versenden.
Dazu erzeuge ich im onClickListener einen TcpSender - Thread, übergebe im "Konstruktor" den zu sendenden Text, und der Thread sendet den Text dann.
Das funktioniert zwar scheinbar, aber ich bin nicht sicher, ob das so richtig programmiert ist.
Zunächst mal die relevanten Code-Teile (nur das Wesentliche !!!)
Ausschnitt aus der MainActivity:
@Override
public void onClick ( View v )
{
new Thread ( new com.bernd.demo.TcpSender( "HALLO" ) ).start ( );
}
Und hier Ausschnitte vom Sende-Thread:
public class TcpSender implements Runnable
{
String url = MY_URL;
int portNumber = MY_PORT;
Socket tcpSocket;
PrintWriter msgWriter;
String msgToSend;
public TcpSender( String strParam )
{
// keep string to send for the run-method
msgToSend = strParam;
}
@Override
public void run ( )
{
try
{
// create a TCP/IP socket
tcpSocket = new Socket ( url, portNumber );
// create a printwriter (with auto-flush) and assign to the socket
msgWriter = new PrintWriter ( tcpSocket.getOutputStream(), true );
// send message to server
msgWriter.println ( msgToSend );
// close Printwriter and TCP/IP socket
msgWriter.close ( );
tcpSocket.close ( );
}
catch (IOException e)
{
Log.d ( LOG_TAG, "IO Exception" );
}
}
}
Alles anzeigen
Jetzt meine Fragen:
1. Im onClickListener erzeuge ich doch eigentlich bei jeden Button-Klick eine neue Instanz vom TcpSender-Thread.
Müsste man den erzeugten Thread nicht einer Variablen zuweisen, und diese wieder zerstören? Wenn ja wo und wann?
Oder erzeuge ich da einen riesigen Stapel von Threads und mülle meinen Speicher mit Thread-Leichen voll?
2. Wie ist das mit der Run-Methode im Thread. Ich sende da was und dann?
Wird die Run-Methode nach dem Senden beendet?
Wenn sie beendet wird, ist dann auch das Thread-Objekt automatisch zerstört ? (das wäre die Antwort auf Frage 1)
3. Könnte der Thread theoretisch schon zerstört werden, WÄHREND oder BEVOR die Daten komplett gesendet wurden?
Vielen Dank im Voraus