Progressbar als eigener Thread

  • Hallo ihr Lieben,
    ich bin neu hier (und auch in der Android-Entwicklung), habe aber schon ca 5 Jahre Erfahrung in Java, doch zur Zeit stehe ich irgendwie auf dem Schlauch, was die Progressbars angeht.


    Grobe Beschreibung:
    Ich habe vor Jahren ein Sudoku Solver in Java geschrieben und jetzt hatte ich die Idee, das Ganze in eine App zu packen. Die Berechnung funktioniert auch super, allerdings dauert die Berechnung bei uneindeutigen Sudokus (z.B. wenn man gar keine Zahlen eingibt) ca 8 Sekunden. Damit die Benutzer nicht denken, die App sei abgestürzt, wollte ich eine horizontale Progressbar hinzufügen. Dafür habe ich eine neue Klasse "AktualisiereProgressbar" angelegt die von Thread erbt und sie in meiner MainActivity mit:

    Java
    AktualisiereProgressbar pb = new AktualisiereProgressbar(this);
    pb.start();



    gestartet.


    Hier mal die Klasse "AktualisiereProgressbar":



    Dem Konstruktor übergebe ich also das Objekt meiner MainActivity, damit dieser Thread jederzeit den Progress-Wert ändern kann. Mein Problem ist nun, dass sich die Progressbar während der Ausführung des Solvers nicht ändert. Mache ich allerdings eine Ausgabe des aktuellen Progresswerts (wie oben angedeutet), dann werden, wie ich mir das vorstelle, nebenläufig die Progress-Werte ausgegeben. Den Solver lasse ich mit einem Callable-Future-Objekt ebenfalls nebenläufig berechnen. Das Ganze sieht in der MainActivity dann so aus:




    Habt ihr eine Idee, was ich noch falsch mache?



    Liebe Grüße Matthias

  • auf der einen seite sagst du dass du schon einige erfahrung in java hast, aber auf der anderen seite setzt du direkt variablen anderer klassen und das dann noch über mehrere threads hinweg. Da schrillen ganz viele alarmglocken bei mir ^^


    1. Warum machst du das in einer neuen klasse, in der dazugehörigen activity würde das mehr sinn ergeben.
    2. warum benutzt du keinen asynctask? :P
    3. Du kannst aus einem anderen thread keine objekte im mainthread verändern. Das heißt du kannst die progressbar nicht aus einem anderen thread als dem mainthread manipulieren. Die Threads müssen also mit Handlern untereinander kommunizieren.

  • Hallo Ben,
    vielen Dank für deine Antwort. Naja, ich habe schon vieles ausprobiert und zum Schluss halt mal sowas verrücktes ;) Die Idee mit dem Handler sah ich schon in einem Tutorial, doch damit funktionierte es bei mir auch nicht. Meine Handler Lösung sieht so aus:

    Hast du eine Idee warum es damit auch nicht funktioniert?



    Liebe Grüße Matthias

Jetzt mitmachen!

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