Timer是一个定时器,需要结合TimerTask使用,是一个定时的机制,更倾向于定时的功能。handler是android中的消息机制,通过handler可以post执行任务,或send发送消息以及其他功能。
所以2者的相同点是:在什么时间去执行一个任务。不同点:出发点就不同吧,Timer就像是一个计时器,多久执行一个任务或间隔多久执行;handler更多的是一个通信的功能,大多数用于子线程发送消息更新UI。
下面就简单介绍:
分别用Timer和hadner执行一个延时任务,几乎没有差别
public class MainActivity extends AppCompatActivity {
private Button btn;
private Timer timer = new Timer();
private Task task = new Task();
private class Task extends TimerTask {
@Override
public void run() {
request();
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
request();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (timer != null) {
//timer执行任务
timer.schedule(task,5000);
}
//handler执行任务
handler.postDelayed(task,5000);
}
});
}
public void request() {
Log.e("zhang", "----------------------------");
}
@Override
protected void onDestroy() {
super.onDestroy();
timer.cancel();//取消任务
handler.removeCallbacks(task);//取消任务
// handler.removeCallbacksAndMessages(null);//即取消任务,且清除消息
}
}
然而,Timer可以间隔多久执行一次任务,并且一直不断的执行,如:
timer.schedule(task,5000,5000);
直到timer.cancel()方法执行,或对象被回收了。
当然,handler除了可以执行任务外,还可以发送消息。
handler.sendEmptyMessageDelayed(1,5000);