我将使用一个使用timertask的计时器来检查Android应用程序中每分钟后的wifi状态。在这里,我必须检查每分钟后wifi无线电是打开还是关闭。如果wifi收音机关闭,我必须打开它,当wifi收音机打开时,计时器工作正常。但是当wifi应用程序在开始时关闭或在应用程序运行时关闭时,计划任务无法按计划运行,而且似乎工作得更快。我该怎么做才能解决这个问题?
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
try {
ConnectivityManager connMgr = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(!networkInfo.isAvailable()){
mainWifi.setWifiEnabled(true);
}
else{
// Wifi is available
}
if(networkInfo.isConnected()){
// Connected to a WiFi network.
}
}
catch(Exception e){
}
}
};
timerT.scheduleAtFixedRate(timerTask, 0, 60000);
答案 0 :(得分:1)
直接来自the Android docs for Timer
:
使用固定费率执行时,将安排每次连续运行任务的开始时间,而不考虑上次运行的时间。如果延迟阻止计时器按时启动任务,这可能会导致一系列的聚合运行(一个紧接着一个启动)。
如果你不了解更多关于代码的内容,就不可能解释你所观察到的具体行为,但上面可能是正在发生的事情。
你可能想要使用固定期间调度,根据文档,它的行为更像你想要的那样:
使用默认的固定期间执行,每次连续运行的任务都是相对于上一次运行的开始时间进行安排的,因此两次运行的时间永远不会超过指定时间段。