Kleine Thread frage...

  • Antworten:7
  • Bentwortet
Michele
  • Forum-Beiträge: 1.525

18.05.2013, 14:24:03 via Website

Hallo alle zusammen.

Habe mal eine kleine frage was den Thread angeht.
Beispiel hier:
1Thread thread = new Thread(new Runnable() {
2 @Override
3 public void run() {
4
5 while(true){
6
7 soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
8 soundID = soundPool.load(getApplicationContext(),R.raw.test, 1);
9 soundPool.play(soundID,1.0f,1.0f,1,0,1f);
10
11 try {
12 Thread.sleep(2000);
13 } catch (InterruptedException e) {
14 e.printStackTrace();
15 }
16 }
17 }
18 });
19 thread.start();

Der Sound geht nun 5sek...Und der Thread macht aber nur 2sek pause und führt den Sound wieder aus
obwohl der andere noch nicht fertig ist.
Ist es nicht machbar das der Thread erst schläft oder wieder anfängt wenn der Sound ende ist?


LG

— geändert am 18.05.2013, 14:24:56

Antworten
Martin Weißhaupt
  • Forum-Beiträge: 75

18.05.2013, 16:14:38 via Website

Wenn ich das richtig sehe willst du einen Ton immer wieder ausgeben?
Dann bist du wahrscheinlich mit dem Timer und Timertask aus java.util besser bedient:

1Timer timer = new Timer();
2timer.scheduleAtFixedRate(new TimerTask()
3{
4 public void run()
5 {
6 // Hier Audio ausgeben
7 }
8}, 0, TIMER_WAIT_TIME);

Viele Grüße,
Martin

Antworten
Michele
  • Forum-Beiträge: 1.525

18.05.2013, 16:18:54 via Website

Danke dir.:D

Der TimerTask und Timer ist für sowas sehr ungenau finde ich. Alles schon probiert.
Ein beispiel...Der Sound geht 5sek und ich will ihn alle 7sek neu starten mit dem Timer. So bleibt 1sek Pause dazwischen.
Dann kann es passieren das er trotzdem irgendwann doppelt gespielt wird.
Und warum? Weil der Timer nicht genau mit der Zeit ist und der Timer sich aufhängt/stockt, wenn die App z.B Arbeitet und trotzdem weiterzählt
aber der Sound nicht weitergeht.


Hoffe verstehst was ich meine..


LG

— geändert am 18.05.2013, 16:28:11

Antworten
Martin Weißhaupt
  • Forum-Beiträge: 75

18.05.2013, 17:01:46 via Website

Hm, das Problem kenne ich nicht. Ich führe den Task allerdings auch in einem Service aus...
Aber mal eine andere Frage: Warum legst du den Thread nur 2 Sekunden schlafen? Würde es nicht gehen das gewünschte Verhalten mit Thread.sleep(6000); zu bekommen?

Antworten
Michele
  • Forum-Beiträge: 1.525

18.05.2013, 17:04:56 via Website

Na klar geht das.:D
Das war ja auch nur ein kleines beispiel.

Führe das auch in einem Service aus.
Nur weiß ja nicht ob der Thread auch so seine Macken haben kann wie ich vom Timer gemerkt habe.

Oder ich bilde mir das nur ein und sollte es vielleicht nochmal versuchen mit dem Timer und TimerTask.
Keine Ahnung was da damals los war.


LG

Antworten
Martin Weißhaupt
  • Forum-Beiträge: 75

18.05.2013, 19:41:21 via Website

Ich beende meinen Task in der onDestroy-Methode und zieh den im onStartCommand wieder neu auf, das funktioniert bei mir eigentlich ganz gut...

Antworten
Andreas Hoffmann
  • Forum-Beiträge: 36

18.05.2013, 19:47:41 via App

Hey,
Kenne mich nicht so gut mit der Audio Ausgabe aus, aber gibt es einen bestimmten Grund, warum du SoundPool benutzt?
Bei dem MediaPlayer kann man glaube ich das ende einer Audio Datei abfangen.

Antworten
Michele
  • Forum-Beiträge: 1.525

18.05.2013, 19:51:19 via Website

MediaPlayer finde ich für kleine Sounds die ich sehr oft wieder abspielen möchte nicht so klasse.

Weil wenn du zu oft sie abspielst mit MediaPlayer dann spielt er sie irgendwann nicht mehr ab.

So habe ich leider die Erfahrung machen müssen.

LG

— geändert am 18.05.2013, 19:52:42

Antworten