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" );
        }
    }
}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
 
		