IT이야기

handler.postDelayed를 취소하는 방법은 무엇입니까?

cyworld 2021. 9. 15. 21:15
반응형

handler.postDelayed를 취소하는 방법은 무엇입니까?


내가이있는 경우 handler.postDelayed이미 실행에서 스레드 내가 그것을 취소해야합니까?


Android에 따라 postDelays를 취소하기 위해 이 작업을 수행합니다. removeCallbacks 는 메시지 대기열에 있는 Runnable r의 보류 중인 모든 게시물을 제거합니다.

handler.removeCallbacks(runnableRunner);

또는 모든 메시지 및 콜백을 제거하는 데 사용

handler.removeCallbacksAndMessages(null);

실행 가능한 항목에 대한 참조를 유지하지 않으려면 다음을 호출하면 됩니다.

handler.removeCallbacksAndMessages(null);

공식 문서 는 다음과 같이 말합니다.

... 토큰이 null이면 모든 콜백과 메시지가 제거됩니다.


실행 중인 동안 postDelayed를 취소해야 하는 경우가 있어서 위의 코드가 제 예제에서는 작동하지 않았습니다. 내가 한 일은 Runnable 내부에서 부울 검사를 하는 것이었습니다. 그래서 주어진 시간 이후에 코드가 실행될 때 당시의 부울 값이 무엇인지에 따라 실행될 것이고 그것이 저에게 효과적이었습니다.

 public static Runnable getCountRunnable() {
    if (countRunnable == null) {
        countRunnable = new Runnable() {
            @Override
            public void run() {
                if (hasCountStopped)
                    getToast("The count has stopped");
            }
        };
    }
    return countRunnable;
}

참고로 - 내 활동을 파괴할 때 다른 개발자가 제안한 코드인 handler.removecallback 및 handler = null을 사용합니다. 코드를 깨끗하게 유지하고 모든 것이 제거되는지 확인하기 위해 핸들을 취소합니다.

ReferenceURL : https://stackoverflow.com/questions/7407242/how-to-cancel-handler-postdelayed

반응형