source

처리기 취소.postdelayed 프로세스

ittop 2023. 8. 30. 22:05
반응형

처리기 취소.postdelayed 프로세스

사용 중handler.postDelayed()내 앱의 다음 단계가 실행되기 전에 대기 기간을 만드는 것.대기 기간 동안 진행 표시줄과 취소 버튼이 있는 대화 상자를 표시합니다.

문제는 시간이 경과하기 전에 postDelayed 작업을 취소할 방법을 찾을 수 없다는 것입니다.

지연된 실행 파일을 게시하기 위해 이 작업을 수행합니다.

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

그리고 이것은 그것을 제거하는 것입니다.myHandler.removeCallbacks(myRunnable);

동일한 핸들러에 여러 개의 내부/익명 실행 테이블이 전달된 경우 동일한 이벤트에서 모두 취소하려는 경우

handler.removeCallbacksAndMessages(null);

문서에 따르면,

보류 중인 콜백 게시물 및 토큰이 목적인 보낸 메시지를 모두 제거합니다.토큰이 null이면 모든 콜백 및 메시지가 제거됩니다.

다른 방법은 실행 파일 자체를 처리하는 것입니다.

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}

지연된 작업에 대한 취소 방법을 제공하는 클래스입니다.

public class DelayedAction {

private Handler _handler;
private Runnable _runnable;

/**
 * Constructor
 * @param runnable The runnable
 * @param delay The delay (in milli sec) to wait before running the runnable
 */
public DelayedAction(Runnable runnable, long delay) {
    _handler = new Handler(Looper.getMainLooper());
    _runnable = runnable;
    _handler.postDelayed(_runnable, delay);
}

/**
 * Cancel a runnable
 */
public void cancel() {
    if ( _handler == null || _runnable == null ) {
        return;
    }
    _handler.removeCallbacks(_runnable);
}}

부울을 통해 전달하여 지연 실행 가능한 게시물 내의 CancelCallBacks(이)를 호출했을 때 효과가 있었습니다.

Runnable runnable = new Runnable(){
    @Override
    public void run() {
        Log.e("HANDLER", "run: Outside Runnable");
        if (IsRecording) {
            Log.e("HANDLER", "run: Runnable");
            handler.postDelayed(this, 2000);
        }else{
            handler.removeCallbacks(this);
        }
    }
};

언급URL : https://stackoverflow.com/questions/4378533/cancelling-a-handler-postdelayed-process

반응형