Thread bekommt aktuellen Zustand von Socket.isConnected mit. Was mach ich falsch?

  • Hallo Zusammen,
    ich bin recht neu in der Android App Entwicklung und habe nun das Problem das ich das Starten einen Threads ohne weiteres hin bekomme. Auch das beenden per Variable klappt. Nur wenn ich anstatt der Variable keepRunning es mit "client.isConnected()" passiert nix.


    hier meine Deklarationen alle in der Klasse aber in keiner Funktion:
    privatevolatilebooleankeepRunning;
    Socket client; //auch mit volatile davor klappt es nicht

    Hier der Thread:


    Runnable TCP_POLL =

    new Runnable() {
    @Override
    publicvoid run() {
    Log.d(
    TAG, "run()-Methode für Polling wurde aufgerufen");
    while(keepRunning){ //kann auch wärend der Thread läuft auf False gesetzt werden und der Thread Stopt
    //while(client.isConnected()){ //hier interessiert den Thread nur der Zustand beim Starten :(
    Log.d(TAG,"Check TCP RxBuffer");
    if (client.isConnected() == true) Log.d(TAG, "1");
    if (client.isConnected() == false) Log.d(TAG, "0");
    try {
    Thread.sleep(1000);
    }
    catch (InterruptedException e){
    // Unterbrechen ingnorieren
    }
    }
    }
    };

  • Dann frag ich mal, wann/wo du die Connection beendest - vielleicht passiert das ja viel später, als du denkst.


    Üblicherweise benutzt man für solche Threads eine eigene boolean-Variable und verläßt sich nicht auf die Connection - denn oftmals sollen Threads weiterlaufen, auch wenn die zugehörige Activity aus welchen Gründen auch immer gerade mal nicht auf dem Schirm ist.

  • Die Verbindung habe ich auch beide mögliche Wege unterbrochen.


    1. per Button klappt was ich auf der Server Seite merke (VB .net Test Programm)



    if

    (client.isConnected()) {
    keepRunning = false
    ; //unschöne Lösung zum beenden des Poll Threads
    try {
    client.close();
    } catch (IOException e) {
    // [b]TODO
    Auto-generated catch block
    e.printStackTrace();
    }

    [/b]


    2. Per beenden des Servers.

  • Vielleicht solltest du deinem Poll-Thread eine fireUp und shootDown (oder wie auch immer *g*) spendieren, mit der du die boolean-Variable hinter einem Funktionsaufruf versteckst. Aber ich kann killphil nur zustimmen, du solltest die boolean wirklich behalten...


    Mit den Methoden kannst du dann auch den Thread erst mal beenden (vielleicht passiert da ja noch was, was du aufräumen möchtest), bevor du die Verbindung kappst.


    sleep() ist ja leider etwas unkontrolliert - dafür vielleicht einen SleepHandler basteln, der sich mit sendMessageDelayed regelmäßig in den Hintern treten läßt und zum Beenden einfach removeMessage aufruft.

  • Jetzt kommen wir der Sache anscheinend näher: du willst was vom Internet laden und fürchtest den Verbindungsabbruch?


    Das Unterbrechen passiert nicht unerwartet - dafür gibt's normalerweise eine IOException oder so beim Netzwerkzugriff - oder nicht?


    Keine Exception => kein Ladefehler - so ist zumindest der Grundgedanke. Du kannst dann also direkt weiterarbeiten...


    Und willst du immer wieder laden oder vielleicht nach drei erfolglosen Versuchen erst mal 5 Minuten Pause einlegen?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!