Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 지연 후 메서드를 호출하는 방법 – Handler postDelayed 완벽 가이드

앱을 개발하다 보면 특정 작업을 즉시 실행하지 않고 몇 초 뒤에 실행해야 하는 경우가 자주 발생합니다. 예를 들어 스플래시 화면을 잠깐 보여준 뒤 다음 화면으로 넘어가거나, 일정 시간 후 알림(Toast)을 표시하는 상황이 대표적입니다.

이번 튜토리얼에서는 안드로이드에서 Handler 클래스의 postDelayed() 메서드를 활용해 지정한 시간이 지난 후에 메서드를 호출하는 방법을 단계별로 살펴보겠습니다. 이 예제에서는 앱 실행 5초 후에 토스트(Toast) 메시지가 화면에 나타나도록 구현합니다.

1단계: 새 프로젝트 생성

Android Studio를 열고 File → New Project 메뉴로 이동한 뒤, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다. 언어는 Java 기반 Empty Activity 템플릿을 선택하면 이 예제를 그대로 따라 할 수 있습니다.

2단계: 레이아웃 파일 작성 (activity_main.xml)

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 중앙에는 "토스트가 표시될 때까지 잠시 기다려 주세요"라는 안내 문구를 배치했습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16sp"
    tools:context=".MainActivity">
    <TextView
        android:text="토스트 메시지가 표시될 때까지 잠시만 기다려 주세요."
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black"
        android:textSize="20sp" />
</RelativeLayout>

3단계: MainActivity.java 작성

핵심 로직은 src/MainActivity.java에 작성합니다. Handler 객체를 생성하고 postDelayed() 메서드에 실행할 Runnable과 지연 시간(밀리초 단위)을 전달합니다. 아래 예제에서는 5000밀리초, 즉 5초 후에 testToast() 메서드가 호출되도록 설정했습니다.

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // 5초(5000ms) 후에 실행되는 부분
                testToast();
            }
        }, 5000);
    }

    private void testToast() {
        Toast.makeText(this, "지연 후에 호출된 메서드입니다!", Toast.LENGTH_SHORT).show();
    }
}

동작 원리 간단 정리

  • Handler: 메인 스레드(UI 스레드)의 메시지 큐와 연결되어 작업을 예약 실행할 수 있게 해주는 클래스입니다.
  • postDelayed(Runnable, delayMillis): 전달된 Runnable 객체를 지정한 밀리초 이후에 실행하도록 큐에 등록합니다.
  • 지연 시간은 밀리초 단위이므로, 3초 후 실행을 원한다면 3000을 전달하면 됩니다.

4단계: AndroidManifest.xml 확인

androidManifest.xml 파일은 아래와 같습니다. 별도의 권한 선언 없이 기본 설정 그대로 사용할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 상단 툴바의 Run ▶ 버튼을 클릭하세요. 목록에서 연결된 모바일 기기를 선택하면 앱이 설치되고 실행됩니다.

앱이 시작되면 먼저 기본 화면이 표시되고, 정확히 5초 후에 화면 하단에 "지연 후에 호출된 메서드입니다!"라는 토스트 메시지가 나타나는 것을 확인할 수 있습니다.

안드로이드에서 지연 후 메서드를 호출하는 방법 – Handler postDelayed 완벽 가이드

추가 팁: 최신 방식과 주의사항

  • 코틀린(Kotlin)에서는 Handler(Looper.getMainLooper()).postDelayed({ ... }, 5000) 형태로 더 간결하게 작성할 수 있습니다.
  • API 30(R)부터는 생성자에 Looper를 명시적으로 지정하는 것이 권장됩니다. (new Handler(Looper.getMainLooper()))
  • 액티비티가 종료될 때 예약된 작업이 실행되면 메모리 누수나 크래시가 발생할 수 있으므로, onDestroy()에서 handler.removeCallbacksAndMessages(null)로 콜백을 제거해 주는 것이 좋습니다.

이처럼 Handler.postDelayed()를 활용하면 복잡한 스레드 처리 없이도 간단하게 지연 실행 로직을 구현할 수 있습니다. 스플래시 화면 전환, 버튼 연타 방지, 애니메이션 타이밍 제어 등 다양한 곳에서 응용해 보세요.