1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Beratung zu HintergrundWorker-Thread - SW-Design

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Viper2000, 01.12.2010.

  1. Viper2000, 01.12.2010 #1
    Viper2000

    Viper2000 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    81
    Erhaltene Danke:
    2
    Registriert seit:
    10.08.2010
    Hallo,

    ich hab mal ne Frage zum Software-Design einer Funktion meiner Applikation. Ich möchte über einen Netzwerk-Socket in einer Schleife so schnell wie möglich Daten von einem Server lesen und bei jedem Schleifendurchlauf die GUI mit den gelesenen Werten aktualisieren. Ich habe solch eine Schleife inklusive Netzwerk-Funktionalität nun direkt am Handy getestet und (ohne GUI aktualisierung) eine Frequenz von ca. 10 anfragen pro Sekunde erreicht. Das ist super, allerdings blockiert das ganze momentan meinen Main-Thread. Die applikation friert also ein da unentwegt Daten gelesen werden.

    Das ganze müsste also während der Laufzeit der App ständig im Hintergrund laufen. Die Gui müsste nach jeder Netzwerk-Abfrage aktualisiert werden und Eingaben die der Benutzer an der Gui vornimmt an den Socket übergeben werden (Der Server wird nämlich nicht nur abgefragt sondern es werden auch Befehle zum Server übertragen die die Art der zurückgelesenen Daten ändern).

    Wie sollte ich das Softwaretechnisch umsetzen? Bin für jegliche Hilfe dankbar!

    Viele Grüße
    Viper :)
     
    Zuletzt bearbeitet: 01.12.2010
  2. rushzero, 01.12.2010 #2
    rushzero

    rushzero Erfahrener Benutzer

    Beiträge:
    171
    Erhaltene Danke:
    36
    Registriert seit:
    20.10.2010
    Ähm hoff hab es kapiert was du willst also ..
    PHP:
     class DEINE_GUI extends Activity
    {
     
    Thread th_socket null;
     
    TextView tv_output = new ....;
     
    Handler h_guiUpdate = new Handler{
    public 
    void incoomingMsg(Message msg){
    tv_output .setText(msg.getValu());
    }
    }
     
    public 
    on onCreate(..){
    ....
     
    SocketBla run = new SocketBla();
     
    run.setHandler(h_guiUpdate);
     
    th_socket = new Thread(run);
     
    th_socket.start();
    ...
    }
     
    class 
    SocketBla extends Runnable
    {
     
    Handler h
    public setHandler(Handler h){this.h;}
     
    public 
    void run(){
    while(
    true)
    {
    String input socket.getInput();
    Message msg = new...
    msg.value input;
    h.sendMessage(msg);
    }
     
    }
     
    }
    }
    Also so hab ich es ungefähr immer gelöst. Aber hab noch nicht wirklich viel mit Threads auf Android gearbeitet.

    Wenn ich was falsch verstanden habe oder ich hier totalen crap code schreiben, ich lass mich gerne belehren :p

    //EDIT Natürlich ist das hier nur pseudo java code :p Methoden namen usw anpassen...
     
    Zuletzt bearbeitet: 01.12.2010
  3. Rotesmofa, 02.12.2010 #3
    Rotesmofa

    Rotesmofa Fortgeschrittenes Mitglied

    Beiträge:
    279
    Erhaltene Danke:
    20
    Registriert seit:
    08.08.2010
    Wie der Vordermann schon schrub, du willst wahrscheinlich einen Thread integrieren. Services solltest du dir auch anschauen, wenn du etwas immer im Hintergrund laufen haben möchtest!

    Ein Link zur Doku Painless Threading | Android Developers

    Gruß
    Rotesmofa
     
    Viper2000 bedankt sich.
  4. Viper2000, 02.12.2010 #4
    Viper2000

    Viper2000 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    81
    Erhaltene Danke:
    2
    Registriert seit:
    10.08.2010
    Danke, Ein "Local Service" klingt genau nach dem was ich haben möchte! Werde mich einlesen und bei Fragen wieder melden.
    Schönen Tag an alle!
     

Diese Seite empfehlen