web-dev-qa-db-fra.com

Existe-t-il un moyen de passer des paramètres à un Runnable?

J'ai un thread qui utilise un gestionnaire pour publier une instance exécutable. cela fonctionne bien, mais je suis curieux de savoir comment je passerais des paramètres à utiliser dans l'instance Runnable? Peut-être que je ne comprends tout simplement pas comment cette fonctionnalité fonctionne.

Pour anticiper une question "pourquoi avez-vous besoin de cela", j'ai une animation filetée qui doit rappeler le fil de l'interface utilisateur pour lui dire quoi dessiner réellement.

34
Genia S.

Simplement une classe qui implémente Runnable avec un constructeur qui accepte le paramètre peut faire,

public class MyRunnable implements Runnable {
  private Data data;
  public MyRunnable(Data _data) {
    this.data = _data;
  }

  @override
  public void run() {
    ...
  }
}

Vous pouvez simplement créer une instance de la classe Runnable avec un constructeur paramétré.

MyRunnable obj = new MyRunnable(data);
handler.post(obj);
77
Lalit Poptani

Il existe différentes façons de le faire, mais la plus simple est la suivante:

final int param1 = value1;
final int param2 = value2;
... new Runnable() {
    public void run() {
        // use param1 and param2 here
    }
}
8
Romain Guy

Si vous avez besoin de communiquer des informations dans un Runnable, vous pouvez toujours demander au constructeur d'objet Runnable de prendre ces informations, ou vous pouvez avoir d'autres méthodes sur le Runnable qui lui permettent de obtenir ces informations, ou (si le Runnable est une classe interne anonyme) pourrait déclarer les valeurs appropriées final afin que le Runnable puisse y accéder.

J'espère que cela t'aides!

6
templatetypedef

Bien que vous puissiez utiliser l'une des réponses ci-dessus, mais si votre question concerne vraiment Android, vous pouvez également utiliser AsyncTask.

1
Yuvi