我有一个使用处理程序发布可运行实例的线程。它工作得很好,但我很好奇如何通过params in在Runnable实例中使用?也许我只是不明白这个功能是如何运作的。
为了抢占“你为什么需要这个”问题,我有一个线程动画,必须回调到UI线程,告诉它实际绘制的内容。
答案 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
}
});