답변:
지연된 실행 파일을 게시하기 위해이 작업을 수행합니다.
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
그리고 이것을 제거하려면 : myHandler.removeCallbacks(myRunnable);
동일한 핸들러에 여러 개의 내부 / 익명 런너 블이 전달되고 동일한 이벤트 사용시 모두 취소하려는 경우
handler.removeCallbacksAndMessages(null);
설명서에 따라
대기중인 콜백 게시물과 obj가 토큰 인 메시지를 삭제합니다. token이 null이면 모든 콜백 및 메시지가 제거됩니다.
removeCallbacks(callback)
특정 콜백을 제거하기 위해 전화
또 다른 방법은 Runnable 자체를 처리하는 것입니다.
Runnable r = new Runnable {
public void run() {
if (booleanCancelMember != false) {
//do what you need
}
}
}
r
사용할 수 있음을 의미 하는 ( 이 경우) 참조가 있음을 의미합니다 myHandler.removeCallbacks(r);
. Runnable이 익명 인 경우 플래그는 클래스를 묶는 클래스의 멤버가됩니다. 즉, 플래그를 변경하려면 해당 오브젝트에 대한 참조가 필요합니다 . r
즉, 어쨌든 다시 가져와야 myHandler.removeCallbacks(r);
합니다. 그리고 내가하고 있다면 myHandler.removeCallbacks(r);
그러한 깃발은 전혀 필요하지 않습니다. 뭔가 빠졌습니까?
다음은 지연 조치에 대한 취소 메소드를 제공하는 클래스입니다.
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 (this)를 호출했을 때 저에게 효과적이었습니다.
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);
}
}
};
이 요지가 도움이되기를 바랍니다 https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4
핸들러 및 실행 가능 기능이있는 화면 실행기로서의 MainActivity, 실행 가능한 로그인 실행 페이지 또는 기본 환경 설정 로그인 사용자가있는 피드 페이지 (firebase).