无法停止/更新处理程序(removeCallbacksAndMessages)

时间:2020-02-28 22:42:48

标签: java android service timer handler

我实现了一项服务,该服务以自定义间隔周期性地更新UI。 更改更新间隔时,我想停止当前处理程序并以新间隔重新开始。 正如我之前在其他线程中读到的那样,在触发处理程序之后,无法中断处理程序。 但是提到的解决方案,例如删除回调和消息

AccessDatabaseEngine_x64.exe

例如实施kill switch

        handler.removeCallbacksAndMessages(null);
        handler.removeCallbacks(runnable);

根本没有帮助。当我以更新的间隔重新启动服务时,处理程序不会停止,从而导致多个处理程序同时运行。

有人知道我在做什么错或如何做得更好吗? 感谢任何帮助!谢谢!

   started = false;
   if(started) {
      //do work..
   }

1 个答案:

答案 0 :(得分:0)

好,我自己修复此问题: 延迟处理程序不是循环调用方法的最佳解决方案。 现在使用TimerTask:

  public int onStartCommand(@Nullable Intent intent, int flags, int startId) {

        if(mTimer != null) {
            mTimer.cancel();
        }
        mTimer = new Timer();

        int timer = Integer.parseInt(getPreference("refresh_interval")) * 1000;
        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), timer, timer);
        return super.onStartCommand(intent, flags, startId);
    }

    class TimeDisplayTimerTask extends TimerTask {

        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {

                @Override
                public void run() {
                   // Do job
                }
            });
        }   
}