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

안드로이드(Android)에서 지연(Delay) 설정하는 방법 - Handler 활용 예제

앱을 개발하다 보면 일정 시간이 지난 후에 UI를 업데이트해야 하는 경우가 종종 발생합니다. 예를 들어 로딩 화면 표시, 알림 메시지 출력, 애니메이션 타이밍 조절 등이 대표적입니다. 이번 글에서는 안드로이드에서 Handler를 사용하여 지연(delay)을 설정하고, 일정 시간 후에 화면의 텍스트를 변경하는 방법을 단계별로 살펴보겠습니다.

1단계: 새 프로젝트 생성

Android Studio를 실행한 뒤, 상단 메뉴에서 File ⇒ New Project를 선택하여 새 프로젝트를 생성합니다. 프로젝트 생성에 필요한 모든 세부 정보를 입력하고 빈 액티비티(Empty Activity) 템플릿을 선택합니다.

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

다음 코드를 res/layout/activity_main.xml에 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
    android:id = "@+id/parent"
    xmlns:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity"
    android:gravity = "center"
    android:orientation = "vertical">
    <TextView
        android:id = "@+id/textChanger"
        android:layout_margin = "20dp"
        android:textAlignment = "center"
        android:text = "Initial text"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content" />
</LinearLayout>

위 코드는 하나의 TextView를 포함하는 간단한 수직 리니어 레이아웃입니다. 처음에는 "Initial text"라는 초기 텍스트가 화면에 표시되며, 일정 시간의 지연이 지난 후 새로운 텍스트로 업데이트됩니다.

3단계: MainActivity.java 코드 작성

다음 코드를 src/MainActivity.java에 추가합니다.

package com.example.andy.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    int view = R.layout.activity_main;
    TextView textChanger;
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(view);
        textChanger = findViewById(R.id.textChanger);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                textChanger.setText("After some delay, it changed to new text");
            }
        }, 5000);
    }
}

핵심 코드 분석: Handler로 지연 구현하기

위 코드에서 지연 처리의 핵심은 Handler입니다. 실제로 지연을 담당하는 부분은 다음과 같습니다.

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        textChanger.setText("After some delay, it changed to new text");
    }
}, 5000);

postDelayed() 메서드는 두 개의 인자를 받습니다. 첫 번째는 지연 후 실행할 Runnable 객체이고, 두 번째는 밀리초(ms) 단위의 지연 시간입니다. 위 예제에서는 5000ms, 즉 5초 후run() 메서드 내부의 코드가 실행되면서 TextView의 텍스트가 새 문자열로 변경됩니다.

참고: 안드로이드에서는 UI 업데이트를 반드시 메인(UI) 스레드에서 수행해야 합니다. Handler는 기본적으로 메인 스레드와 연결되므로, 별도의 스레드 처리 없이도 안전하게 UI를 업데이트할 수 있다는 장점이 있습니다.

앱 실행 및 결과 확인

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

앱이 처음 실행되면 아래와 같이 초기 텍스트가 화면에 표시됩니다.

안드로이드(Android)에서 지연(Delay) 설정하는 방법 - Handler 활용 예제

5초의 지연 시간이 지난 후에는 다음과 같이 텍스트가 자동으로 업데이트된 것을 확인할 수 있습니다.

안드로이드(Android)에서 지연(Delay) 설정하는 방법 - Handler 활용 예제

마무리

이처럼 Handler의 postDelayed() 메서드를 활용하면 복잡한 스레드 관리 없이도 손쉽게 지연 작업을 구현할 수 있습니다. 참고로 코틀린이나 최신 안드로이드 개발 환경에서는 Handler(Looper.getMainLooper()) 형태로 명시적으로 Looper를 지정하는 것이 권장되며, 코루틴(coroutine)의 delay() 함수를 사용하는 방법도 널리 활용되고 있으니 함께 참고하시기 바랍니다.