CountdownTimer instabil?

  • Antworten:1
phil anselm
  • Forum-Beiträge: 44

11.09.2010, 10:14:14 via Website

Hi,

ich bastle grade eine Test-Applikation mit dem CountdownTimer und habe da ein kleines Problem mit.
Und zwar nutze ich testweise den CountdownTimer, um beim Start und beim Ende
des Timers immer einen MP3-Sound abzuspielen mit der MediaPlayer-Klasse und eine Textview hochzuzählen.
Kurz gesagt ne Art Stoppuhr mit Sound.

Konkret mache ich das mit 2 CountdownTimern. Der 1. läuft immer 60 Sekunden durch und spielt beim Start und Ende den Sound per MediaPlayer ab. Und am Ende (in der onFinish Methode) startet er dann den 2. CountdownTimer, der 10 Sekunden läuft, um dann den 1. Timer wieder zu starten....
der 2. Timer ist also ein "Pause Timer".

Problem dabei ist, dass die App nur unter 2.2 stabil läuft.
Wenn ich sie unter 2.1 teste (Virtual Device), stürzt die App nach Runde 2 ab.
Unter 2.2 (Virtual Device und auf meinem HTC Hero) läuft sie immer durch ohne Absturz (15, 20 oder mehr Runden - kein Problem), nur dann ist ab >= Runde 12 kein Sound mehr zu hören....kommt aber teilweise dann ein paar Runden später wieder...

Vielleicht problematisch, weil ich da (unnötig?) viel mit Multithreading arbeite mit 2 Timern und Android da nich so gut mit klar kommt?
Habt ihr Tips, was da schief laufen könnte bzw. ob ich lieber ne andere Timer-Lösung nutzen sollte vielleicht?

Grüße und Danke schonmal für jeden Tip.

— geändert am 11.09.2010, 10:47:02

Antworten
phil anselm
  • Forum-Beiträge: 44

11.09.2010, 21:51:10 via Website

Hier noch der Code dazu, vielleicht seht ihr sofort nen Fehler meinerseits?
Der Counter startet bei Click auf einen Button.

1private CountDownTimer timer;
2
3private void doPause()
4 {
5 //Haupttimer kann nicht finalisiert werden, daher auf null gesetzt
6 timer = null;
7 new CountDownTimer((10 * 1000), 1000) {
8
9 public void onTick(long millisUntilFinished) {
10
11 }
12
13 public void onFinish() {
14 start();
15
16 }
17 }.start();
18 }
19
20
21
22 private void start()
23 {
24 playStartSound();
25
26 timer = new CountDownTimer((60 * 1000), 1000) {
27
28
29 public void onTick(long millisUntilFinished) {
30 if(!(millisUntilFinished >= (60 * 1000) - 1000))
31 countSecondsUp();
32 }
33
34 public void onFinish() {
35 countSecondsUp();
36 playEndSound();
37 if(COUNT > CURRENT_COUNT)
38 {
39 CURRENT_COUNT++;
40 doPause();
41 }
42 else
43 {
44 end();
45 }
46
47 }
48 }.start();
49 }
50
51 private void playStartSound()
52 {
53 MediaPlayer mp = MediaPlayer.create(getBaseContext(), Uri.parse("android.resource://com.example.test1/" +R.raw.start));
54 mp.start();
55 mp = null;
56 }
57
58 private void playEndSound()
59 {
60 MediaPlayer mp = MediaPlayer.create(getBaseContext(), Uri.parse("android.resource://com.example.test1/" +R.raw.end));
61 mp.start();
62 mp = null;
63 }

Antworten