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

Gen*_* S. 34 java multithreading android runnable

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

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

Lal*_*ani 79

只是一个Runnable用接受参数的构造函数实现的类可以做,

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

  @override
  public void run() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用参数化构造函数创建Runnable类的实例.

MyRunnable obj = new MyRunnable(data);
handler.post(obj);
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法,但是如何从我的计时器线程内部与此类进行通信(Runnable在主UI线程中).在将Runnable传递给处理程序之前,我可以将该成员公开并在我的计时器线程中设置它吗?看起来好得不真实:) (2认同)

Rom*_*Guy 8

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

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


tem*_*def 6

如果你需要将信息传递给a Runnable,你总是可以让Runnable对象构造函数接收这些信息,或者可以有其他方法Runnable允许它获取这些信息,或者(如果Runnable是一个匿名的内部类)可以声明相应的值,final以便Runnable可以访问它们.

希望这可以帮助!