计时器的实现常用的三种方法:
方法一:Handler +Thread
public class TimerUtil {
private final int MSG_TYPE_START = 0;
private final int MSG_TYPE_PAUSE = 1;
private final int MSG_TYPE_STOP = 2;
private int passedTime ;
private TimeCallBack timeCallBack;
public TimerUtil() {
passedTime = 0;
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_TYPE_START:
handler.postDelayed(recordTime,1000);
break;
case MSG_TYPE_PAUSE:
handler.removeMessages(MSG_TYPE_START);
break;
case MSG_TYPE_STOP:
passedTime = 0;
if (timeCallBack != null){
timeCallBack.onTime(passedTime);
}
handler.removeCallbacks(recordTime);
handler.removeMessages(MSG_TYPE_START);
break;
}
}
};
Runnable recordTime = new Runnable() {
@Override
public void run() {
passedTime++;
if (timeCallBack != null){
timeCallBack.onTime(passedTime);
}
handler.sendEmptyMessage(MSG_TYPE_START);
}
};
public void startCount(){
handler.sendEmptyMessage(MSG_TYPE_START);
}
public void pauseCount(){
handler.sendEmptyMessage(MSG_TYPE_PAUSE);
}
public void stopCount(){
handler.sendEmptyMessage(MSG_TYPE_STOP);
// handler.removeCallbacksAndMessages(null);
}
public interface TimeCallBack{
void onTime(int passedTime);
}
public void setTimeCallBack(TimeCallBack timeCallBack){
this.timeCallBack = timeCallBack;
}
public void onDestory(){
handler.removeCallbacksAndMessages(null);
}
}
方法二:Handler类的postDelyed
public class HanderActivity extends Activity {
TextView tvShow;
private int i = 0;
private int TIME = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvShow = (TextView) findViewById(R.id.tv_show);
handler.postDelayed(runnable, TIME); //每隔1s执行
}
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
// handler自带方法实现定时器
try {
handler.postDelayed(this, TIME);
tvShow.setText(Integer.toString(i++));
System.out.println("do...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("exception...");
}
}
};
}
方法三:Handler+Timer+TimerTask
public class HanderDemoActivity extends Activity {
TextView tvShow;
private int i = 0;
private int TIME = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvShow = (TextView) findViewById(R.id.tv_show);
timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tvShow.setText(Integer.toString(i++));
}
super.handleMessage(msg);
};
};
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// 需要做的事:发送消息
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
}
网友评论