我之前是在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);
}