Endlosschleife bis Stop-Button geklickt wurde

  • Antworten:11
AdmiralCrunch
  • Forum-Beiträge: 8

24.06.2015, 13:45:45 via Website

Hi.. habe da eine doofe Anfängerfrage..

ich habe einen Start und einen Stop-Button.. wenn auf Start geklickt wird, soll eine Schleife so lange wiedrholt werden bis man auf Stop geklickt hat.. habe das mit eine do/while bzw. while-schleife versucht.. doch hier wird eine Endlosschleife erzeugt und die App stürzt ab .. wobei die Endlosschleife ja eigentlich genau das ist was ich will :/

Welcher Lösungsansatz ist hier der richtige? Für einen Tritt in die richtige Richtug wäre ich sehr dankbar :)

LG

— geändert am 24.06.2015, 14:04:07

Antworten
Klaus
  • Blogger
  • Forum-Beiträge: 19.172

24.06.2015, 13:49:56 via App

Hallo AdmiralCrunch!

Herzlich Willkommen hier bei uns im Forum.

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)

| LG Klaus |
| Google Nexus 6P - Dirty Unicorns | Google Nexus 6 - Dirty Unicorns |
| Das AndroidPITiden-Buch | Die Androiden-Toolbox | AndroidPIT-Regeln |

Antworten
AdmiralCrunch
  • Forum-Beiträge: 8

24.06.2015, 14:05:15 via Website

Oki, erledigt :) .. hoffe so ist's aussagekräftiger :)

Antworten
AdmiralCrunch
  • Forum-Beiträge: 8

24.06.2015, 14:34:09 via Website

Hi .. danke erstmal für die schnelle Antwort :)

also ich versuche mir einen kleinen Pattern-Sequencer zu coden.. soweit steht schon alles und nun soll in einer sich immer wiederkehrenden Schleife abgefragt werden, ob ein Sound gesetzt wurde und falls ja, dieser abgespielt werden.. der Sequencer soll mittels eines Start/Stop-Buttons gestartet bzw. gestoppt werden..

hierfür habe ich eine bool variable seq_status gesetzt.. wenn diese true ist, soll sich die schleife so lange wiederholen bis die variable mittels OnClickListener auf false gesetzt wurde..

 private View.OnClickListener seqPlay = new View.OnClickListener() {
    public void onClick(View v) {
        btn_seq_play = (Button)findViewById(R.id.btn_seq_play);            
        if(seq_status) {
            btn_seq_play.setText("Play");
            seq_status = false;
        } else {
            btn_seq_play.setText("Stop");
            seq_status = true;
        }

// hier soll die schleife ausgelöst werden
}
};

Antworten
Gelöschter Account
  • Forum-Beiträge: 1.625

24.06.2015, 15:49:19 via App

Ich kenne mich zwar in der Android Programmierung nicht aus, aber auch unter Windows würde eine Endlosschleife das System in die Knie zwingen, wenn du in der Schleife die Kontrolle nicht immer wieder mal an das System zurück gibst.

Die Idee mit Timer hört sich gut an.

— geändert am 24.06.2015, 15:50:40

Jetzt kaufe ich erstmal ein Fernglas, dann sehen wir weiter. ;-)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.06.2015, 16:39:50 via Website

Genau endlisschleifen sind eine schlechte Idee ausser man macht extra einen Thread dafür.
Ganz verstenden habe ich das immer noch nicht.
Für was brauchst du die Schleife deiner Meinung nach?
Du kannst doch de Code zum Sound abspielen direkt in die onClick Methode schreiben.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
AdmiralCrunch
  • Forum-Beiträge: 8

25.06.2015, 09:13:22 via Website

Es soll ein kleiner Pattern-Sequencer werden.. d.h. ein Abspielmuster für Musik..
.. dieses Muster soll im Loop abgespielt werden bis man halt auf den stop-button geklickt hat

habe es jetzt mit einem Thread versucht..

 Runnable seq_thread = new Runnable() {
    @Override
    public void run() {
        while(seq_status) {

// hier soll die Schleife sich immer wieder wiederholen bis man auf stop geklickt.. also seq_status = false .. gesetzt hat

            }

        }
    }
};

in dem start-button-OnClickListener habe ich

seq_thread = new Thread(seq_thread);
seq_thread.run();

.. aber das ding will einfach nicht :/

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

25.06.2015, 09:36:12 via Website

Also zum einen: http://developer.android.com/reference/java/lang/Thread.html

Zu jeder Klasse gibt es eine Doku und in der von Thread steht drin, welche Methode man zum starten verwendet ;)

Zum anderen:
Ich hoffe du beschäftigst dich auch ein bisschen damit wie Multi-threading funktioniert.
Genauer gesagt was der unterschied zwischen blockierenden und nicht-blockierenden Methoden ist.
Da wirst Du nämlich wahrscheinlich die erste Überraschung erleben, wenn Du in einem endless-loop-thread immer wieder die gleichen Samples in den Media-Player schmeißt.
Ohne "blocking" dauert der Durchlauf der Schleife wenige Nano- oder Millisekunden.

Ich sag immer noch:
Mach es ohne Schleife. Starte den ersten Sample und wenn der fertig gespielt hat, starte den zweiten, wenn der Listener dich über die beendete Wiedergabe informiert.

— geändert am 25.06.2015, 09:38:25

Antworten
AdmiralCrunch
  • Forum-Beiträge: 8

25.06.2015, 10:43:42 via Website

Mach es ohne Schleife. Starte den ersten Sample und wenn der fertig gespielt hat, starte den zweiten, wenn der Listener dich über die beendete Wiedergabe informiert.

..mhh, das wird nicht funktionieren, da zum einen mehrere samples zeitgleich abgespielt werden müssen und zum anderen die "abspielgeschwindigkeit" .. also der durchlauf der schleife.. ein eigenes tempo hat ..

aber danke für den hinweis mit den blockierenden Methoden :) ..werd mir das mal reinziehen :)

Antworten
AdmiralCrunch
  • Forum-Beiträge: 8

25.06.2015, 20:12:41 via Website

Habs gelöst :)
.. einThread mit einem inneren runOnUiThread waren die Lösung :) .. vielen Dank für die Hlfe :)

vielleicht noch etwas anderes (weiss grad nicht ob ich hierfür einen neues Thema erstellen soll) .. das ding funktioniert jetzt und spielt die sounds ab.. doch liegen sounds übereinander.. sprich sollen zeitgleich abgespielt werden... bekommt man den eindruck, sie seien ein bissl versetzt.. ist das normal? .. weiss jemand wie man das umgeht?

Antworten