Problem mit der Programausführung

  • Antworten:4
Robin Ehrenhöfer
  • Forum-Beiträge: 8

30.03.2013, 14:13:34 via Website

Hallo,

Habe schon wieder ein Problem:
ich will ein kleines Programm zur Reaktionszeitmessung schrieben, und bei der Entwicklung taucht dieses Problem auf:
1button.setOnClickListener(new View.OnClickListener() {
2 @Override
3 public void onClick(View v) {
4
5 switch(systemstate)
6 {
7 case 0: //IDLE
8 startcountdown = System.currentTimeMillis();
9 systemstate = 1;
10 x = 1;
11 break;
12 case 1: //Countdown to get ready
13
14 break;
15 case 2:
16
17 break;
18 default:
19 break;
20 }
21
22 }
23
24
25 });
26
27
28 while(systemstate == 1)
29 {
30 currentcnt = System.currentTimeMillis();
31 difference = currentcnt - startcountdown;
32 cnt = 3 - (difference / 1000);
33 count.setText("Countdown: " +cnt);
34
35 if(cnt <= 0)
36 {
37 systemstate = 2;
38 x = 0;
39 }
40 break;
41
42 }
43
44 if(systemstate == 2)
45 event.setBackgroundColor(0xFFF00000);

Am Anfang ist der systemstate = 0
sobald man auf den Buton drückt, soll systemstate =1 sein
dann soll er die Schleife machen, bis die 3 sekunden abgelaufen sind und dann den Hintergrund des TextView "event" rot machen

Da ich neu in Java bin, weiß ich nicht, wie das Programm abläuft, ich denke jedoch, dass es wie in C nach der Reihe abgearbeitet wird, oder ist ein clicklistener wie ein Interrupt bei µControllern?

Danke schon einmal im Vorhinen, Robin

Antworten
impjor
  • Forum-Beiträge: 1.793

30.03.2013, 18:29:44 via App

Es sieht aus, also würdest du im Main bzw. UI-Thread eine Schleife haben. Beachte: solange diese ausgeführt wird, wird der Thread blockiert. Das ui friert ein, und der onClickListener wird nicht ausgeführt, bis die schleife beendet ist.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Robin Ehrenhöfer
  • Forum-Beiträge: 8

30.03.2013, 22:30:59 via Website

Danke, impjor.

Beachte: solange diese ausgeführt wird, wird der Thread blockiert.
-> den clicklistener kann man nicht mit einem Interrupt vergleichen.

Ich glaube, ich habe das Problem nicht ausreichend beschireben, wäre mir sogar lieber, wenn der clicklistener nicht ausgeführt wird, während die Schleife läuft.
Genauer: das Problem ist, dass das TextView nicht aktualisiert wird, kann das sein, dass in dem tv standardmäßig nichgts drinnen stehen sollte?

Also die app ist nich nicht so weit, dass man die reaktionszeit schon messen kann, es ist lediglich de Teil, in dem man sich als bereit "meldet"
nach dem countdown sollte man dann bereit sein, und dann innerhalb eines Zeitraumes von ca 15 sek taucht irgendwann eine Meldung auf, auf welche man reagieren soll, dann wird erst die reaktionszeit gemessen und ausgegeben

Falls noich jemand informationen braucht, dann bitte melden.

Antworten
impjor
  • Forum-Beiträge: 1.793

30.03.2013, 23:24:34 via App

Die TextView wird nicht aktualisiert, weil Android die Schleife ausführt, und so die View nicht neu zeichnen kann.
Mach die Schleife in einem anderen Thread, am besten in einem AsyncTask.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Robin Ehrenhöfer
  • Forum-Beiträge: 8

02.04.2013, 18:06:02 via Website

ok, danke

"AsyncTask" ist dann wie ein eigener prozess?

werde mich mal daran setzten und weiter probieren, sobald ich wieder Zeit habe

Antworten