有没有办法将参数传递给Runnable?

时间:2012-02-03 03:25:04

标签: java android multithreading runnable

我有一个使用处理程序发布可运行实例的线程。它工作得很好,但我很好奇如何通过params in在Runnable实例中使用?也许我只是不明白这个功能是如何运作的。

为了抢占“你为什么需要这个”问题,我有一个线程动画,必须回调到UI线程,告诉它实际绘制的内容。

5 个答案:

答案 0 :(得分:75)

只使用接受参数的构造函数实现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);

答案 1 :(得分:8)

有多种方法可以做到,但最简单的方法如下:

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

答案 2 :(得分:6)

如果您需要将信息传递到Runnable,您始终可以让Runnable对象构造函数接收此信息,或者可以在Runnable上使用其他方法来允许它获取此信息,或者(如果Runnable是匿名内部类)可以声明适当的值final,以便Runnable可以访问它们。

希望这有帮助!

答案 3 :(得分:1)

虽然你可以使用上面的任何一个答案,但如果你的问题是真的关心android那么你也可以使用AsyncTask。

答案 4 :(得分:-1)

我认为找到了一种更简单的方法:

public interface MyRunnable extends Runnable {
    public void run(int data);
}

public void someMethod(int n, String s, MyRunnable r) {
   ...
   r.run(n);
   ...
}
电话:

someMethod(5, "Hello", new MyRunnable() {

    @Override
    public void run(int data) {
        // TODO Auto-generated method stub

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
});