2016-04-27 19 views
-1

Runnable zu verstehen, hier ist mein Code:Nicht in der Lage in android

public class MainActivity extends AppCompatActivity { 

    Runnable runnable; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     runnable=new Runnable() { 
      @Override 
      public void run() { 
       Log.i("hello","runnable") ; 
      } 
     }; 
    } 

} 

Warum ist es nicht Protokolldruck? Benötige ich einen Handler und übergebe dann ein lauffähiges Objekt? Wird die Methode run() nur einmal ausgeführt?

+0

Sie haben es nicht gestartet. Neuen Thread aufrufen (runnable) .start(); – Pehlaj

+0

Ihre Frage ist nicht vollständig. Bitte tun Sie es zuerst –

+0

@ P.Rai 'Runnable' ist nur eine Schnittstelle: Sie können keine Schnittstelle – pskink

Antwort

3

Derzeit definieren Sie nur Ihre Runnable, aber es wird nie aufgerufen. Es gibt einige Möglichkeiten, wie Sie eine runnable z. in einem Thread oder auch in einem Handler. Hier

ist ein Beispiel für einen Thread, in dem Sie nicht die Benutzeroberfläche aktualisieren können:

new Thread(runnable).start(); 

Wenn Sie die Benutzeroberfläche aktualisieren müssen, sollten Sie einen Handler wie folgt verwenden:

new Handler().post(runnable); // do as soon as possible 
new Handler().postDelayed(runnable, 300); // do it after 300ms 

Normalerweise es doesn ‚t Sinn machen, aber Sie können Ihre runnable auch als eine Art Callback wie folgt verwenden:

runnable.run(); 

A runna Sie können mehrmals verwendet werden, indem Sie die obigen drei Beispiele mehrmals verwenden.

+0

warum der 3. Weg keinen Sinn ergibt? Dies ist ein normaler Weg, wie auf die "Runable" -Schnittstelle zugegriffen wird (sowohl die erste als auch die zweite Option tun das). – pskink

+0

Ein Runnable wird normalerweise für Threads oder Handler verwendet. Dies wird aus der Ursache funktionieren, aber normalerweise würden Sie das nicht tun. Der letzte Aufruf erfolgt im Handler oder im Thread, dh dieser Aufruf wird in Frameworks und normalerweise nicht im Benutzercode verwendet. – rekire

+0

Re, "Normalerweise macht es keinen Sinn, aber ..." Die Verwendung eines 'Runnable' als Callback macht einen _lot_ Sinn. Aber _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | –