原文鏈接
http://guo2android.blog.51cto.com/10476685/1735396
博客遷移
給出這么個場景
假設你要做一個計時器蟆湖,點擊按鈕開始計時老虫,再點擊按鈕重新開始計時
我這邊要使用postDelayed方法來對控件進行刷新顯示胁赢,也能達到計時效果
貼代碼
代碼塊
說一下
習慣上直接接postdelayed。待讳。罕拂。。备徐,然后第一次點擊計時沒問題萄传,第二次就看起來好像計時加快了。坦喘。盲再。
其實是這么個問題,如果那個handler不是成員變量瓣铣,每次點擊都new一個handle答朋,或者沒有將handler里面的線程給結束掉直接再new runnable里面執(zhí)行代碼塊的話,就會多一條線程出來棠笑,對控件進行操作梦碗,其實每條線程對控件執(zhí)行的間隔都是1秒,但由于是多個線程對控件進行操作,增加的次數(shù)多了洪规,看起來就好像是計時加快了印屁。
解決的辦法是保證只有一條存活的線程對控件進行操作,所以每次調(diào)用計時方法時斩例,先將該handler里面的線程結束掉雄人,再用新線程對控件進行操作,醬紫就沒問題了
結束掉線程的方法是這個
handler.removeCallbacks(runnable);
好念赶,就這樣