timer的使用相当于一个新开的线程。
注:不能在线程中更新UI(TextView的显示内容),需要使用Handler传值来进行数据的改变,否则会报错!
一.方法一(timer.schedule)
创建一个新的Timer
Timer timer = new Timer();
给定时器创建任务
timer.schedule(new TimerTask() {
@Override
public void run() {
//传递空信息,以及what值
handler.sendEmptyMessage(100);
}
//第一个0为延迟启动时间,第二个1000为每启动一次的时间
},0,1000);
Handler消息处理
int index = 3;
Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what==100){
//给TextView赋值
textView.setText(""+time);
time--;
if (time==0){
//关闭计时器
timer.cancel();
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
}
}
};
二.方法二(TimerTask)
创建一个新的Timer
Timer timer = new Timer();
创建个TimerTask任务
TimerTask timerTask=new TimerTask() {
@Override
public void run() {
Message message=new Message();
message.what=100;
message.obj="你好";
handler.sendMessage(message);
}
};
同样使用Handler来接收
@SuppressLint("HandlerLeak")
Handler handler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what==100){
//给TextView赋值
String time = msg.obj.toString();
textView.setText(time);
//关闭计时器
timer.cancel();
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
}
};
4.启动定时器
timer.schedule(timertask,1000,1000);