thread - runnable java 8
¿Hay alguna forma de pasar parámetros a Runnable? (5)
Esta pregunta ya tiene una respuesta aquí:
- Runnable con un parámetro? [duplicado] 6 respuestas
Tengo un hilo que usa un controlador para publicar una instancia ejecutable. funciona bien, pero tengo curiosidad acerca de cómo pasaría los parámetros para usarlos en la instancia de Runnable. Quizás no entiendo cómo funciona esta característica.
Para adelantarse a la pregunta "¿por qué necesita esto?", Tengo una animación enhebrada que tiene que volver a llamar al hilo de la interfaz de usuario para decirle qué dibujar realmente.
Aunque puede usar cualquiera de las respuestas anteriores, pero si la pregunta está realmente preocupada por Android, también puede usar AsyncTask.
Creo que encontré un enfoque más simple:
public interface MyRunnable extends Runnable {
public void run(int data);
}
public void someMethod(int n, String s, MyRunnable r) {
...
r.run(n);
...
}
la llamada:
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
}
});
Hay varias formas de hacerlo, pero la más fácil es la siguiente:
final int param1 = value1;
final int param2 = value2;
... new Runnable() {
public void run() {
// use param1 and param2 here
}
}
Si necesita comunicar información en un Runnable
, siempre puede hacer que el constructor del objeto Runnable
tome esta información, o podría tener otros métodos en el Runnable
que le permitan obtener esta información, o (si el Runnable
es una clase interna anónima) podría declarar los valores apropiados final
para que Runnable
pueda acceder a ellos.
¡Espero que esto ayude!
Simplemente puede hacer una clase que implemente Runnable
con el constructor que acepte el parámetro,
public class MyRunnable implements Runnable {
private Data data;
public MyRunnable(Data _data) {
this.data = _data;
}
@override
public void run() {
...
}
}
Simplemente puede crear una instancia de la clase Runnable con constructor parametrizado.
MyRunnable obj = new MyRunnable(data);
handler.post(obj);