2017-03-25 1 views
0

Ich lese in einem Dokument, dass wenn wir Runnable implementieren, wir einen neuen Thread erstellen und jeden Code innerhalb dieses Threads ausführen, und wir verwenden Handler, um UI-Updates auf dem uithread durchzuführen.Handler und Runable

Aber in meinem Beispiel unten

private class AutoIncrementer implements Runnable { 
    @Override 
    public void run() { 
     if(plusButtonIsPressed){ 
      incrementValue(); 
      handler.postDelayed(new AutoIncrementer(), REPEAT_INTERVAL_MS); 
     } 
    } 
} 

Hier verwendete ich handler.postDelayed() die Benutzeroberfläche mit inkrementierten Wert und auf onLongClickListener()

Umsetzung erneut zu aktualisieren wieder
plusButton.setOnLongClickListener(
     new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View arg0) { 
       plusButtonIsPressed = true; 
       handler.post(new AutoIncrementer()); 
       return false; 
      } 
     } 
    ); 

ich handler.post(new AutoIncrementer()) verwenden ..... Warum Muss ich diese verwenden, wenn ich die UI durch handler.postDelayed() aktualisiere ???

Antwort

4

Runnable ist kein neuer Thread, es ist nur ein Stück Code, der "ausgeführt" werden kann.

Ihre handler.post innerhalb onLongClick ist, was den ersten Lauf der AutoIncrementer startet. Innerhalb dieses Codes muss dann die nächste Überprüfung geplant werden (da onLongClick nur einmal aufgerufen wird und nicht wiederholt, solange die Taste gedrückt gehalten wird).

Verwandte Themen