原文鏈接
http://guo2android.blog.51cto.com/10476685/1735396
博客遷移
給出這么個場景
假設(shè)你要做一個計時器,點擊按鈕開始計時,再點擊按鈕重新開始計時
我這邊要使用postDelayed方法來對控件進(jìn)行刷新顯示,也能達(dá)到計時效果
貼代碼

代碼塊
說一下
習(xí)慣上直接接postdelayed。。。。,然后第一次點擊計時沒問題,第二次就看起來好像計時加快了。。。
其實是這么個問題,如果那個handler不是成員變量,每次點擊都new一個handle,或者沒有將handler里面的線程給結(jié)束掉直接再new runnable里面執(zhí)行代碼塊的話,就會多一條線程出來,對控件進(jìn)行操作,其實每條線程對控件執(zhí)行的間隔都是1秒,但由于是多個線程對控件進(jìn)行操作,增加的次數(shù)多了,看起來就好像是計時加快了。
解決的辦法是保證只有一條存活的線程對控件進(jìn)行操作,所以每次調(diào)用計時方法時,先將該handler里面的線程結(jié)束掉,再用新線程對控件進(jìn)行操作,醬紫就沒問題了
結(jié)束掉線程的方法是這個
handler.removeCallbacks(runnable);
好,就這樣