# Android Studio - Button ändert Farbe erst nach Delay?



## dummycoders (29. Jan 2018)

Hallo!

Wir haben ein kleines Problem mit unserer Quiz App. 
Wir wollen bei einer richtigen/falschen Antwort den Button 
in einer an die Antwort angepasste Farbe färben.

rot = falsch 
grün = richtig

Code: https://pastebin.com/HkvhsbUY

Wenn wir jetzt auf ein richtiges klicken, dann ändert sich die Farbe erst 
nach dem Delay. Was machen wir falsch?


----------



## Robat (29. Jan 2018)

Thread.sleep() legt den kompletten Thread lahm.
Nutzt lieber einen Handler für delays

```
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       // mach was nach 3s
   }
},3000);
```

BTW: Strings vergleicht man mit equals und nicht mit == 

Edit: in manchen Szenarien verursacht diese Variante memory leaks. Sollte das so sein muss der Handler und der Runnable als statische innere Klasse implementiert werden.


----------



## dummycoders (29. Jan 2018)

Robat hat gesagt.:


> Thread.sleep() legt den kompletten Thread lahm.
> Nutzt lieber einen Handler für delays
> 
> ```
> ...



Wir haben den selben Code grade gefunden, trotzdem Danke!


----------



## mrBrown (29. Jan 2018)

Robat hat gesagt.:


> Edit: in manchen Szenarien verursacht diese Variante memory leaks. Sollte das so sein muss der Handler und der Runnable als statische innere Klasse implementiert werden.


Wodurch kommt denn da das Memory-Leck zustande?
Das runnable wird nicht aufgeräumt und die umgebende Klasse deshalb auch nicht?


----------



## Robat (29. Jan 2018)

Naja grundsätzlich basiert die Aussage auf Erfahrungswerten.. War selbst mal auf dieses Problem gestoßen.
 Nach längerem suchen bin ich dann auf eine Variante mit der statsichen Klasse gestoßen.
Wenn ich mich nicht irre aus folgenden Gründen (Berichtige mich falls ich falsch liege)
Es wird eine anonyme, nicht statische innere Klasse benutzt die implizit eine Referenz auf die äußere Klasse (die Activity) hält. Das wird dann zum Problem wenn der context der Activity vom GC gefressen wird.

Beim nachlesen bin ich gerade hier drauf gestoßen.


----------



## mrBrown (29. Jan 2018)

Ach, diese komischen Activity-Lifecycles wieder


----------

