스케줄러를 사용하여 루프가 너무 오래 걸리지 않도록 스케줄러를 실행하고 루프를 종료하면 루프를 종료합니다.ScheduledExecutorService를 사용하여 Android에서 예약 된 작업 예약 취소
이 매우 정직 :
public void startSchedulerForTimeout() {
Log.i("x", "SCHEDULING TIMEOUT ");
timeoutForLoopReached = false;
scheduler.schedule(new Runnable() {
public void run() {
timeoutForLoopReached = true;
Log.i("x", "SET TIMEOUT FLAG ");
}
}, 10, TimeUnit.SECONDS);
}
그래서 내 코드에 난 그냥 쓰기 : 내가 필요 다시 루프를 실행하면 예약 된 작업이 실행되지 않는
startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
...do the loop stuff
}
을 확인하려면 새로운 타이머가 두 번째 시간 사이에 첫 번째 루프가 끝난 후에 발사되는 이전 루프 대신 새로운 루프의 시작에서 다시 시작되도록 쓸모없는 작업의 스케줄을 취소하십시오 (타임 아웃 전에 루프를 종료 한 경우). 루프가 실행 됨)
이 예약 된 작업 혼합을 피하기 위해 해고되지 않은 예약 된 작업의 예약을 취소 할 수 있습니까?
감사합니다.
슈퍼 - 대단히 감사합니다. 그런데이 모든 것이 한 가지 방법에 있고 1 분 후에 완전한 방법이 끝나면. 메서드가 완료된 후에도 일정 작업이 여전히 존재합니까? 아니면 자동으로 종료됩니까? 또한, 같은 scheduleFuture를 두 번 이상 취소하면 문제가 발생합니까? 또는 이미 취소 (또는 실행) 된 경우 추적해야합니까? – user387184
그건 그렇고, 방금 애플 리케이션을 종료하고 디버거가 계속 인쇄 - 그리고 그것은 디버거 출력의 백 로그처럼 보이지 않습니다. 그래서 앱이 종료 될 때까지 "뒤로"를 눌러도 앱이 계속 실행됩니까? 이상하지 않니? – user387184
@ user387184 1. 예약 된 작업이 자동으로 종료되지 않습니다. ScheduledExecutorService.shutdownNow()를 사용하여 실행중인 모든 작업과 대기중인 작업을 모두 종료합니다. 2. cancel() 메소드 API를 체크 아웃하십시오. _Attempts 3.이 타스크의 실행을 취소하십시오. 작업이 이미 완료되었거나 이미 취소되었거나 다른 이유로 취소 할 수없는 경우이 시도는 실패합니다 ._ 3. API를 확인하면 ScheduledFuture 클래스의 다른 유용한 API 인 getDelay(), isCancelled()) 등 – yorkw