resueltos pelotas mover imagenes hilos fuente estructura ejemplos ejemplo con codigo java android multithreading handler

pelotas - mover imagenes con hilos en java



Ejecutar mensajes del manejador en un hilo de fondo (4)

No está claro a qué te refieres con Handler .

Parece que necesita un hilo que se alimenta de procesos para que se ejecute en una cola. Probablemente se beneficiaría de la investigación de los Executor here pero aquí hay un par simple de dos hilos que se comunica a través de una cola.

public class TwoThreads { public static void main(String args[]) throws InterruptedException { System.out.println("TwoThreads:Test"); new TwoThreads().test(); } // The end of the list. private static final Integer End = -1; static class Producer implements Runnable { final Queue<Integer> queue; public Producer(Queue<Integer> queue) { this.queue = queue; } @Override public void run() { try { for (int i = 0; i < 1000; i++) { queue.add(i); Thread.sleep(1); } // Finish the queue. queue.add(End); } catch (InterruptedException ex) { // Just exit. } } } static class Consumer implements Runnable { final Queue<Integer> queue; public Consumer(Queue<Integer> queue) { this.queue = queue; } @Override public void run() { boolean ended = false; while (!ended) { Integer i = queue.poll(); if (i != null) { ended = i == End; System.out.println(i); } } } } public void test() throws InterruptedException { Queue<Integer> queue = new LinkedBlockingQueue<>(); Thread pt = new Thread(new Producer(queue)); Thread ct = new Thread(new Consumer(queue)); // Start it all going. pt.start(); ct.start(); // Wait for it to finish. pt.join(); ct.join(); } }

Quiero ejecutar Runnable en un hilo de fondo. Quiero usar Handler porque es conveniente para retrasos. Lo que quiero decir es

handler.post(runnable, delay);

Donde ejecutable debe ejecutarse en el hilo de fondo . ¿Es posible crear dicho controlador? ¿Hay algún Looper "de fondo" en alguna parte o cómo puedo crearlo?

PD: Sé cómo hacerlo con una clase personalizada extends Thread, pero requiere un poco más de esfuerzo de codificación que hacerlo de manejador. Así que por favor no publique otras soluciones o algo así como

handler.post(new Runnable() { @Override public void run() { new Thread() { @Override public void run() { //action } }.start(); } });

Simplemente deambulo si Handler puede hacerlo de la manera "limpia".



Puedes probar algo como esto

private void createHandler() { Thread thread = new Thread() { public void run() { Looper.prepare(); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // Do Work handler.removeCallbacks(this); Looper.myLooper().quit(); } }, 2000); Looper.loop(); } }; thread.start(); }


Simplemente puede hacer esto:

private Handler mHandler = null; private HandlerThread mHandlerThread = null; public void startHandlerThread(){ mHandlerThread = new HandlerThread("HandlerThread"); mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); }

Luego invoque con:

handler.postDelayed(new Runnable(),1000);