Android: ¿Cómo puedo detener Runnable?

He intentado de esta manera:

private Runnable changeColor = new Runnable() { private boolean killMe=false; public void run() { //some work if(!killMe) color_changer.postDelayed(changeColor, 150); } public void kill(){ killMe=true; } }; 

Pero no puedo acceder al método kill() !

En su lugar implementar su propio mecanismo thread.kill() , utilizando la API existente proporcionada por el SDK. Administre su creación de subprocesos dentro de un subproceso y utilice Future.cancel () para matar el subproceso en ejecución:

 ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor(); Runnable longRunningTask = new Runnable(); // submit task to threadpool: Future longRunningTaskFuture = threadPoolExecutor.submit(longRunningTask); ... ... // At some point in the future, if you want to kill the task: longRunningTaskFuture.cancel(true); ... ... 

El método de cancelación se comportará de forma diferente en función del estado de ejecución de la tarea, consulte la API para obtener más detalles.

 public abstract class StoppableRunnable implements Runnable { private volatile boolean mIsStopped = false; public abstract void stoppableRun(); public void run() { setStopped(false); while(!mIsStopped) { stoppableRun(); stop(); } } public boolean isStopped() { return mIsStopped; } private void setStopped(boolean isStop) { if (mIsStopped != isStop) mIsStopped = isStop; } public void stop() { setStopped(true); } } 

clase ……

  private Handler mHandler = new Handler(); public void onStopThread() { mTask.stop(); mHandler.removeCallbacks(mTask); } public void onStartThread(long delayMillis) { mHandler.postDelayed(mTask, delayMillis); } private StoppableRunnable mTask = new StoppableRunnable() { public void stoppableRun() { ..... onStartThread(1000); } } }; 
 mHandler.removeCallbacks(updateThread); 

changeColor se declara como Runnable , que no tiene un método kill() .

Necesitas crear tu propia interfaz que extiende Runnable y agrega un método (public) kill() .

  • ¿Es este hilo seguro?
  • Cómo implementar un Runnable con un no-bloqueador Looper / Handler
  • ¿Cómo poner un runnable en paquete?
  • Android: ¿Qué hilo llama .onSensorChanged?
  • Contexto dentro de un Runnable
  • ¿Un runnable en un servicio se ejecuta en el subproceso de interfaz de usuario
  • Mejor manera de esperar a que retrofit2 termine antes de continuar async
  • ¿Es esta Runnable a salvo de fugas de memoria?
  • ¿Cómo puedo cambiar la tasa o el período de una tarea repetida mediante ScheduledExecutorService?
  • ¿Cómo dejar de ejecutar cuando la aplicación va a fondo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.