ProgressBar Horizontal int[ ] Array nacheinander durchlaufen

  • Hallo,


    ich versuche gerade eine ProgressBar (horizontal) zu basteln.


    Dabei soll diese mehrer Zeitabschnitte durchlaufen z.B. int [ ] times = { 10 , 5 , 8 , 15 };


    Zwischendurch sollte man den Prozess auch anhalten können.


    Als erstes hab ich das ganze mit einem CountDownTimer versucht aber der hat nie bis zum ende gezählt, war ein bisschen seltsam das ganze.


    Jetzt bin ich dabei das ganze mit einem extra Thread zu basteln.


    Dabei ist aber das Problem des anderen Thread anzuhalten bzw mitgeteilt zu bekommen dass zb times[0] erledigt ist und ich einen neuen Thread mit times[1] starten kann.
    Bei Anhalten weis ich nicht wie das geht. myThread.destroy() stürzt die App ab und bei stop() auch ... mit interrupt() stürzt die kiste nicht ab aber es passiert auch nicht.


    hier mal mein code:



    mit ready habe ich versucht zu erfahren dass der andere Thread abgeschlossen ist aber das funktioniert iwie nicht.


    Gruß

  • Also generell würd ich das mit AsyncTask machen, als mit nem eigenen Thread. In Android kann man auch nicht wirklich feststellen, ob der Thread fertig ist, außer man implementiert ne eigene Variable dafür in der entsprechenden Unterklasse von Thread. Man muss einen Thread auch nicht anhalten, der hört von alleine auf, wenn er das gemacht hat, was er tun soll...also keine Instruktionen mehr hat.

  • Ich habe das ganze jetzt mit einem CountDownTimer gemacht ...


    allerdings kommt es mir jetzt so vor als würde die onFinish() anweisung sehr lange brauchen um ausgelöst zu werden, somit ist die TimerFunktion unkonsestent und hat nicht die gleichen Intervalle.


    Doof ist auch und was ich nicht verstehe ... wann wird der erste Tick ausgelöst ? gleich beim starten einer oder erst wenn der erste Intervall abgelaufen ist ... weil bei mir zählt der doofe timer nur bis 3 im endeffekt
    nur durch umbiegen in der onFinish zählt er so weit wie er soll




    ---------------------------------------------------------------------------------------------------------------
    alt
    ---------------------------------------------------------------------------------------------------------------


    Ja ich finde das langsam etwas viel code nur um so ne kleine aufgabe zu erledigen.


    Das anhalten des Threads sollte realisiert werden, da ich den ProgressBar anhalten will und wieder weiter laufen lassen.


    Das funktioniert jetzt hab einfach ne boolean STOP eigebaut und den Thread damit vorzeitig aus seiner arbeitsschleife geworfen.


    Problem is jetzt immernoch das abarbeiten der zeiten.


    das funktioniert natürlich nicht:

    Code
    case MENU_TIMES:
                    int i = 0;
                    while (i < times.length) {
                            maxBarValue = times[i];
                            myProgressBar.setMax(times[i]);
                            barThread = new Thread(myThread);
                            barThread.start();
                            ready = false;
                            i++;}


    die schleife funktioniert natürlich nicht. Ich muss warten bis der erste Thread abgeschlossen ist.


    dann hab ich boolean ready eingebaut um zu erkennen ob der Thread abgeschlossen ist.



    würde wahrscheinlich auch mit Thread.isalive() gehen.


    Das Problem an der ganzen geschichte ist aber das der hauptThread dann in der while hängt, dann könnt ich den sleep() befehl auch gleich da rein schreiben und hätte kein stress mit anderen threads.


    habt ihr ne elegantere lösung?


    AsyncTask ist ja eig nicht viel anders nur dass man zb besser abbrechen kann und so.


    Gruß

  • Also ich hab jetzt hier eine recht einfach lösung für den Timer, allerdings ist hier das Problem, dass schon bei 30sec der countdown eine sekunde zwischendrin bei 10-15 verschluckt da der interrupt anscheined zu lahm ist.



    kann man da was machen ?

Jetzt mitmachen!

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