Monday, February 27, 2012

Android: How do I stop Runnable?


I tried this way:




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;
}
};



but I can't access kill() method!

2 comments:

  1. Instead implement your own thread.kill() machanism, using existing API provided by the SDK. Manage your thread creation within a threadpool, and use Future.cancel() to kill the running thread:

    ThreadPoolExecutor threadPoolExecutor = Executors.newSingleThreadExecutor();
    Runnable longRunningTask = new Runnable();

    // submit task to threadpool:
    Future longRunningTaskFurure = threadPoolExecutor.submit(longRunningTask);

    ... ...
    // At some point in the future, if you want to kill the task:
    longRunningTaskFuture.cancel(true);
    ... ...


    Cancel method will behaviour differently based on your task running state, check the API for more details.

    ReplyDelete
  2. changeColor is declared as Runnable, which does not have a kill() method.

    You need to create your own interface that extends Runnable and adds a (public) kill() method.

    ReplyDelete