在做投影仪项目的时候,**有线连接界面** 的工作是我开发负责,其中涉及到定时器的使用,因为**在有线网络光纤插入和拔出这两种时刻,系统不会给出任何提示**,所以需要在这个界面需要启动定时器定时轮询检查有线网络是否成功连接。
Timer timer;
/**
* 当有线没有连接时,定时搜索wifi
*/
private void startTimer() {
if (timer == null) {
timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (networkUtil.ethernetLink()) {
Log.e("网络", "定时器搜索到有线连接上!!");
EthernetConnectActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setEthernetInfo();
}
});
} else {
Log.e("网络", "定时器搜索到有线连接断开!!");
EthernetConnectActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setNetInfoDefault();
}
});
}
}
};
timer.schedule(task, DELAY, PERIOD);
}
}
在这里需要注意的是:定时器要记得关闭哦!
@Override
protected void onStop() {
super.onStop();
if (timer!=null){
timer.cancel();
//purge()方法用于从这个计时器的任务队列中移除所有已取消的任务
timer.purge();
timer =null;
}
}
在编码之余,我深深的感受到,我们不能停留在了解调用API层面上,就例如上面提到的定时器的使用,定时器的使用方式还有很多个,例如定时器的几种实现方式,我们不能仅仅停留在会用上,还需要知道他应该在什么情况下使用,使用过程中会出现什么问题,有什么问题是可以提前规避的,这些才是优秀的程序员应该学习和掌握的。