DAten von der Activity an einen Thread senden

  • Hallo Gemeinde,
    ich grüble schon seit Tagen über ein Problem und finde keine Lösung:
    Meine Activity startet einen separaten "Netzwerk"-Thread, der eine TCP/IP Kommunikation mit einem Server handelt.
    Momentan übergebe ich das Sendekommando einfach im Konstruktor des Netzwerk-Threads.
    Der Thread baut eine Verbindung zum Server auf, schickt das im Konstruktor übergebene Kommando an den Server,
    liest die Antwort zurück und sendet sie über einen Handler per Message an den UI-Thread.
    Danach wird die Verbindung und der Thread wieder beendet.


    Ich möchte allerdings, dass der Thread die Verbindung hält, und weitere Sendekommandos ausführt.
    Nur: Wie bekomme ich die Kommandos vom UI Thread an den Netzwerk-Thread?


    Alle Beispiele, die ich bisher gefunden haben, zeigen nur den Empfangsweg, nicht aber das Senden.
    Ich stehe auf dem Schlauch.
    Hier ist mein Code, den ich auf das Wesentliche zusammengeschrumpft habe:

  • Danke für die Antwort,
    ich verstehe allerdings nicht, wie mir das jetzt bei meinem Problem helfen soll.
    Ob ich jetzt normale Tasks oder Async-Tasks verwende bleibt gleich.
    Ein Thread/Task wird gestartet, bekommt beim Start Parameter übergeben (was er machen soll) ,
    führt etwas aus und wird nach der Ausführung beendet.


    Ich möchte einen Thread / Task ohne Parameter starten, der solange läuft, wie die Main Activity läuft.
    Und ich möchte on demand Kommandos von der Main-Activity an den Task senden, die er dann ausführt.


    Ich habe heute ein paar Beispiele gefunden, wie man einen Thread mit einem Handler/Looper erweitert.
    Ich glaube, das ist das, was ich suche, allerdings sind die Beispiele nicht kompilierbar.
    Das ist echt schwer zu verstehen.

  • Das ist ja alles ganz nett, nur beantwortet es meine Frage nicht.


    Meine Frage war: Wie kann ich (egal ob Thread, Task, Service, was auch immer ) starten,
    und dann mehrmals hintereinander Daten an den Thread/Task/Serviece/WasAuch immer senden?


    Ich habe jetzt ein Beispiel gefunden, bei dem ein Handler-Thread mit einem Handler versehen wird.
    Die Main Activity startet den Handler Thread, der Handler Thread erzeugt einen Handler, über den ich Daten an
    ihn senden kann ( genau das suche ich ! ), die der Handler dann ausführt.


    Nur leider: Es funktioniert nicht so, wie im Tutorial beschrieben.


    Die Daten werden von der Main-Activity an den Handler des Threads gesendet mit:


    Code
    Message msg = new Message();
    msg.what = 1;
    threadNetwork.handlerNetwork.sendMessage(msg);

    Auf den Handler handlerNetwork kann ich aber von der Main-Activity nicht zugreifen. (Compilerfehler).


    Wenn es so gehen würde, wäre es genau das, was ich suche.
    Hier der komplette Code.



  • Hallo dann schaue dir mal die das Beispiel an.
    Würde sagen das zweite ist das was du suchst.


    https://www.oreilly.com/librar…g/9781449364120/ch04.html


    Code
    public class LooperActivity extends Activity { LooperThread mLooperThread; private static class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { if(msg.what == 0) { doLongRunningOperation(); } } }; Looper.loop(); } } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLooperThread = new LooperThread(); mLooperThread.start(); } public void onClick(View v) { if (mLooperThread.mHandler != null) { Message msg = mLooperThread.mHandler.obtainMessage(0); mLooperThread.mHandler.sendMessage(msg); } } private void doLongRunningOperation() { // Add long running operation here. } protected void onDestroy() { mLooperThread.mHandler.getLooper().quit(); } }
  • Hallo dann schaue dir mal die das Beispiel an.
    Würde sagen das zweite ist das was du suchst.


    https://www.oreilly.com/librar…g/9781449364120/ch04.html


    Code
    public class LooperActivity extends Activity { LooperThread mLooperThread; private static class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { if(msg.what == 0) { doLongRunningOperation(); } } }; Looper.loop(); } } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLooperThread = new LooperThread(); mLooperThread.start(); } public void onClick(View v) { if (mLooperThread.mHandler != null) { Message msg = mLooperThread.mHandler.obtainMessage(0); mLooperThread.mHandler.sendMessage(msg); } } private void doLongRunningOperation() { // Add long running operation here. } protected void onDestroy() { mLooperThread.mHandler.getLooper().quit(); } }

Jetzt mitmachen!

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