Есть ли способ передать параметры Runnable?
У меня есть поток, который использует обработчик для отправки экземпляра runnable. он работает хорошо, но мне любопытно, как я буду передавать параметры, которые будут использоваться в экземпляре Runnable? Возможно, я просто не понимаю, как работает эта функция.
Чтобы упредить вопрос "зачем нужен этот", у меня есть потоковая анимация, которая должна перезвонить в поток пользовательского интерфейса, чтобы рассказать ей, что на самом деле делать.
Ответы
Ответ 1
Просто класс, реализующий 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);
Ответ 2
Существуют различные способы сделать это, но самым простым является следующее:
final int param1 = value1;
final int param2 = value2;
... new Runnable() {
public void run() {
// use param1 and param2 here
}
}
Ответ 3
Если вам нужно сообщить информацию в Runnable
, вы всегда можете иметь конструктор объекта Runnable
, чтобы взять эту информацию или использовать другие методы в Runnable
, которые позволяют ей получить эту информацию, или ( если Runnable
является анонимным внутренним классом) может объявить соответствующие значения final
, чтобы Runnable
мог получить к ним доступ.
Надеюсь, это поможет!
Ответ 4
Хотя вы можете использовать любой из вышеперечисленных ответов, но если вы сомневаетесь, действительно беспокоитесь об андроиде, вы также можете использовать AsyncTask.
Ответ 5
Я думаю, что нашел более простой подход:
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
}
});