Android - 使用 Timer 和 TimerTask 控制任务?

2023-11-24

我目前正在尝试在 Android 应用程序中设置 WiFi 扫描,每 30 秒扫描一次 WiFi 接入点。

我已使用 Timer 和 TimerTask 使扫描按照我需要的时间间隔正确运行。

但是,我希望能够在用户按下按钮时停止和开始扫描,而我目前在停止然后重新启动 Timer 和 TimerTask 时遇到问题。

这是我的代码

TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();

public void doWifiScan(){

scanTask = new TimerTask() {
        public void run() {
                handler.post(new Runnable() {
                        public void run() {
                         wifiManager.scan(context); 
                         Log.d("TIMER", "Timer set off");
                        }
               });
        }};


    t.schedule(scanTask, 300, 30000); 

 }

  public void stopScan(){

   if(scanTask!=null){
      Log.d("TIMER", "timer canceled");
      scanTask.cancel();
 }

}

因此,计时器和任务启动正常,扫描每 30 秒进行一次,但是我无法让它停止,我可以停止计时器,但任务仍然发生,并且 scanTask.cancel() 似乎也不起作用。

有一个更好的方法吗?或者我在 Timer/TimerTask 类中遗漏了一些东西?


您可能会考虑:

  • 检查调用的布尔结果cancel()关于您的任务,因为它应该表明您的请求是成功还是失败
  • Try purge() or cancel() on the Timer而不是TimerTask

如果您不一定需要Timer and TimerTask,你可以随时使用postDelayed()(可在处理程序和任何View)。这将安排一个Runnable延迟后在 UI 线程上执行。要让它重复发生,只需在完成定期工作后让它再次自行安排即可。然后,您可以监视布尔标志来指示该过程何时结束。例如:

private Runnable onEverySecond=new Runnable() {
    public void run() {
        // do real work here

        if (!isPaused) {
            someLikelyWidget.postDelayed(onEverySecond, 1000);
        }
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 使用 Timer 和 TimerTask 控制任务? 的相关文章

随机推荐