(Android/안드로이드) View.postDelayed()를 이용한 지연 실행

✨ 개요


1. 요약


2. View.postDelayed() 기본 사용법

val time = 1000L

binding.myButton.postDelayed({
    // 1초 뒤 실행될 코드
}, time)

매우 간단하게 UI스레드에서 1초 뒤 실행된다.


3. post와 postDelayed의 차이

메서드 의미
post {} 다음 UI 프레임에서 실행
postDelayed({ }, 1000) n ms 뒤 UI 스레드에서 실행

둘 다 Main Looper 에서 실행되므로 UI작업에 적합하다.


4. View.postDelayed()가 UI 작업에 적합한 이유


5. postDelayed 활용 예제

5-1. 버튼 클릭 후 1초 뒤 실행

binding.btnSend.setOnClickListener {
    binding.progressBar.isVisible = true

    binding.progressBar.postDelayed({
        binding.progressBar.isVisible = false
    }, 1000)
}

5-2. 애니메이션 끝난 후 다음 동작 실행

binding.imageView.animate()
    .alpha(1f)
    .setDuration(300)
    .withEndAction {
        binding.root.postDelayed({
            showToast("애니메이션 후 실행됨")
        }, 1000)
    }


6. postDelayed() 사용 시 주의할 점


7. postDelayed 취소하기

val runnable = Runnable {
    // 실행 코드
}

binding.root.postDelayed(runnable, 1000)

// 취소
binding.root.removeCallbacks(runnable)

View 가 사라지면 자동 취소되지만 명시적으로 취소해야 하는 경우 이렇게 처리


8. Best Practice (실무 팁)

방식 실행 스레드 UI 작업 적합성 라이프사이클 안전성 코드 난이도 비고
View.postDelayed() 메인(UI) ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ (가장 쉬움) View가 detach되면 자동 취소
Handler(Looper.getMainLooper()) 메인(UI) ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ 직접 cancel 필요
Coroutine + delay 메인/UI or 백그라운드 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ scope cancel 필수
Timer/TimerTask 백그라운드 ⭐⭐ 오래된 방식, 메인 전환 필요
HandlerThread 별도 스레드 ⭐⭐ ⭐⭐ 반복/백그라운드 작업에 유용


Related Posts