Activity, View und Thread Kommunikation

  • Hallo zusammen,


    ich möchte eine App mit folgenden Funktionen erzeugen:
    Eine Aktivity die ein Koordinatensystem anzeigt mit einer Kennlinie.
    Parallel soll ein Thread laufen, der zyklisch aufwendigere Berechnungen durchführt und nach einem Durchlauf das Ergebnis zurück gibt.
    Das Koordinatensystem wird in einer separaten View-Klasse erzeugt.
    Mein Ordentlichkeits-Sinn sagt mir, dass ich die 3 Klassen in eigenen .java-Dateien erzeuge.


    Wie immer ist das Problem, dass alles miteinander kommuniziert wie es soll, also der Thread sein Ergebnis (ein Float oder Double Array) zyklisch an die Aktivity bzw. view übergibt.


    Ich habe schon mehrere interessante Kommunikations-Ansätze gefunden: Runnables, Handler, Broadcasts, AsyncTasks
    aber wie ich den Umweg dabei gehen soll, da ich ja in der View-Klasse zeichne und nicht in der Activity habe ich bisher bei keinem verstanden.
    Dem Konstruktor der View darf ich z.B. keine benutzerdefinierten Parameter übergeben.
    Außerdem habe ich schon Nachteile bei z.B. Broadcasts gelesen, dass diese nicht für zyklische Kommunikation geeignet wären.


    Es wäre also sehr hilfreich einen Tipp zu haben mit welchem Java oder Android Kommunikationswerkzeug ich auf dem richtigen Weg bin oder besser wie das Kommunikations-Grundgerüst aussehen müsste um die Funktion zu erfüllen.
    Vielen Dank vorab.


    Grüße vom Bodensee

  • Moin,


    das klingt nach der typischen Aufgabe für einen AsyncTask.
    Den Du entgegen Deines Ordentlichkeits-Sinns nicht in eine eigene Java Datei packst, sondern als Klasse in Deine Activity.


    Dort hast Du dann mit entsprechendem Aufbau direkten Zugriff auf Dein View und kannst aus dem onProgress direkt auf das View zugreifen.


    Alternativ in einen Service damit und ein paar Callbacks definiert.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo nochmal,


    die AsyncTask, Broadcasts, Services scheinen alles Funktionen zu sein für mehr sporadische, länger laufende Aufgaben.
    In meinem Fall soll immer die gleiche Funktion berechnet werden, nur eben x-mal pro Sekunde.
    Natürlich mit anderen Zahlen sonst wärs ja langweilig!


    Das ideale Mittel für die Aufgabe scheinen die Handler zu sein.
    Das einzige Beispiel das dies mit unabhängigen Klassen erklärt habe ich auf Android-Developers gefunden.
    Nur das ist leider so umfangreich gehalten, dass ich es nicht verstehe und nicht für meine Zwecke hinbiegen kann.
    Das mit den internen Klassen kommt mir immer etwas wie Getrickse vor.


    Gibt es nirgends ein kurz und knappes Programm-Gerüst mit einer Aktivity und einem normalen separaten Thread, wo z.B. ein int-Wert per Handler übergeben wird?


    Gruß

  • Das einzige Handler-Beispiel, das ich kenne, findet sich bei Vogella:
    http://www.vogella.com/tutoria….html#concurrency_handler


    Ich kann mir nicht vorstellen, dass Dir das in irgend einer Art und Weise helfen wird.
    Das könnte daran liegen, dass ich bezüglich Deiner Problembeschreibung davon ausgehe, dass ständig irgendwas im Hintergrund berechnet wird und diese Berechnung ständig die Anzeige aktualisieren soll.


    Die internen Klassen sind Gefrickel. Das liegt daran, dass Java zusammengefrickelt ist. Da hat es sich eingebürgert, so zu arbeiten.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Nach einigem Nachdenken und größeren Küstlerpausen, die gewünschte Antwort auf meine Frage.
    Das Grundgerüst einer einfachen Activity ohne Schnikschnak.
    Ein Arbeitsthread, der in einer separaten Klasse liegt und zyklisch Ergebnisse sendet.
    Der Handler als Kommunikationsmedium zudem static mit einer WeakReference, dass die Warnung verschwindet.
    Die zugehörige View besteht nur aus dem verlinkten Textview und einer Statusbar.
    Hoffe das ganze arbeitet ressourcenarm, damit die Berechnungen möglichst komplex werden können.


    Verbesserungsvorschläge sind natürlich willkommen.


Jetzt mitmachen!

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