2017-02-21 3 views
0

Dans AppCompatActivity, je voulais juste obtenir des commentaires à ce sujet. Quand est-ce que Runnable fonctionne?Comment cela fonctionne-t-il en ce qui concerne le thread d'interface utilisateur?

Est-ce que le super.onBackPressed(); est posté sur le fil principal de l'interface utilisateur, puis mon Runnable est également publié sur le fil principal de l'interface utilisateur? Je sais que c'est une file d'attente. est-ce correct?

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
      // some work 
      } 
     }); 
} 
+1

en onBackPressed toujours fonctionne sur thread d'interface utilisateur .. –

+0

Il y a thread, pas un que perse. Si vous voulez accéder à quelque chose dans l'interface utilisateur, il est nécessaire d'exécuter des choses sur l'interface utilisateur comme ça. Cependant, comme vous l'avez déjà dit, il est déjà sur le thread UI car onBackPressed est appelé à partir du thread UI –

Répondre

0

onBackPressed() sera toujours appelée sur UI thread. donc la méthode runOnUiThread() est inutile ici.

Ce que votre code est de poster le Runnable sur le thread d'interface utilisateur de fil interface utilisateur lui-même

interne runOnUiThread() fait l'action ci-dessous

public final void runOnUiThread(Runnable action) { 
    if (Thread.currentThread() != mUiThread) { 
     mHandler.post(action); 
    } else { 
     action.run(); 
    } 
} 
Code
+0

Mon Q n'est pas si clair mais je l'expérimente si j'appuie sur le bouton retour sur un Fragment et dans le 'public void onBackPressed()' je veux pour obtenir le Fragment actuel qui est maintenant dans 'R.id.frame' après' super.onBackPressed(); 'Je dois exécuter ceci:' FragManager.findFragmentById (R.id.frame); 'dans le' runOnUiThread' –

+0

'onBackPressed()' sera appelé uniquement sur 'Activity' sur le 'thread UI' de sorte que vous pouvez exécuter du code sans' runOnUiThread() ' – arjun