我之前是在handle的handleMessage中控制時間每隔一秒更新一下的,但是我發現在使用handle的post和removeCallbacks控制線程時,時間根本沒有停止而且隨着多次按暫停按鈕,它更新的次數越來越快了。
後來我發現在線程把消息給handle之後,它就結束了,之後我又開啓了新的線程,之後handle又是延遲1秒發送消息,之後,消息就會不足1秒就拿到了,所以更新越來越快。
解決方法,在線程中延遲發送:
Thread update_thread=new Thread(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain();
msg.what = UPDATE_CLOCK;
handler.sendMessage(msg);
//延遲一秒發送
handler.postDelayed(update_thread,1000);
}
});
...
//開啓線程
handler.post(update_thread);
//切換狀態
case R.id.stop:
if(isStart){
stop.setBackgroundResource(start);
isStart=false;
//移除線程
handler.removeCallbacks(update_thread);
}else{
stop.setBackgroundResource(R.drawable.stop);
isStart=true;
handler.post(update_thread);
}