web-dev-qa-db-ja.com

Runnableにパラメーターを渡す方法はありますか?

ハンドラーを使用して実行可能なインスタンスをポストするスレッドがあります。それはうまく動作しますが、Runnableインスタンスで使用するためにparamsをどのように渡すのかについて興味がありますか?たぶん、私はこの機能がどのように機能するのか理解していないだけかもしれません。

「なぜこれが必要なのか」という質問を先取りするために、UIスレッドにコールバックして、実際に何を描画するかを伝える必要があるスレッドアニメーションがあります。

34
Genia S.

パラメーターを受け入れるコンストラクターでRunnableを実装するクラスで実行できますが、

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

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

パラメーター化されたコンストラクターでRunnableクラスのインスタンスを作成できます。

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

さまざまな方法がありますが、最も簡単な方法は次のとおりです。

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

情報をRunnableに伝達する必要がある場合は、常にRunnableオブジェクトコンストラクターにこの情報を取得させるか、Runnableに他のメソッドを持たせて、この情報を取得するか、(Runnableが匿名の内部クラスである場合)finalがアクセスできるように適切な値Runnableを宣言できます。

お役に立てれば!

6
templatetypedef

上記の答えのいずれかを使用できますが、質問が本当にAndroidについて心配している場合は、AsyncTaskも使用できます。

1
Yuvi