我实现了一项服务,该服务以自定义间隔周期性地更新UI。 更改更新间隔时,我想停止当前处理程序并以新间隔重新开始。 正如我之前在其他线程中读到的那样,在触发处理程序之后,无法中断处理程序。 但是提到的解决方案,例如删除回调和消息
AccessDatabaseEngine_x64.exe
例如实施kill switch
handler.removeCallbacksAndMessages(null);
handler.removeCallbacks(runnable);
根本没有帮助。当我以更新的间隔重新启动服务时,处理程序不会停止,从而导致多个处理程序同时运行。
有人知道我在做什么错或如何做得更好吗? 感谢任何帮助!谢谢!
started = false;
if(started) {
//do work..
}
答案 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
}
});
}
}