enfix
enfix

Reputation: 6970

Stop handler in Android don't work

i have this Handler:

private Runnable mRunnableReset = new Runnable() {
     public void run() {
        Log.i("MyApp", "mRunnableReset");
     }
};
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
    public void run() {
        while (true) {
            try {
                Thread.sleep(2000);
                mHandler.post(mRunnableReset);
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    }
};

I tried to use this code in my onDestroy() method

mHandler.removeCallbacks(mRunnableReset);
mHandler.removeCallbacksAndMessages(null);

but the mRunnable is still running (i can see the log in LogCat). If I use mRunnable.destroy() my app crashes.

How can i stop this ? Thank you.

Upvotes: 0

Views: 740

Answers (2)

Marcin Orlowski
Marcin Orlowski

Reputation: 75629

Instead of using Thread.sleep() use postDelayed() while posting your Runnable (instead of regular post()).

Upvotes: 1

Lalit Poptani
Lalit Poptani

Reputation: 67286

Whoops you are using

while(true){
 Thread.sleep(2000);
 mHandler.post(mRunnableReset);
}

How will it stop then? It won't.

Instead it should be like,

private Runnable mRunnableReset = new Runnable() {
     public void run() {
        Log.i("MyApp", "mRunnableReset");
        mHandler.removeCallbacks(mRunnableReset);
        mHandler.post(mRunnableReset);
     }
};
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
    public void run() {
         try {
                Thread.sleep(2000);
                mHandler.post(mRunnableReset);
            } catch (Exception e) {
                // TODO: handle exception
            }
    }
};

And then to stop your mRunnableReset use mHandler.removeCallbacks(mRunnableReset);

And better would be using mHandler.postDelayed(mRunnableReset, 2000) instead of Thread.sleep(2000);

Also check my answer here to get complete working of how Handler will work.

Upvotes: 1

Related Questions