android studio Handler 사용하기
Handler클래스의 목적
1. UI 업데이트 : Android에서는 UI 컴포넌트는 오직 메인 스레드(or UI 스레드)에서만 접근 가능하다. 백그라운드 스레드에서 수행된 작업의 결과를 UI에 반영하기 위해서는 메인스레드로 메세지나 Runnable 객체를 전달해야한다. 이를 위해서 Handler를 사용한다.
2. 작업 스케줄링 및 실행 : Handler는 특정 시간이 지난 후에 코드를 실행하거나 정기적으로 코드를 실행하는 등의 작업 스케줄링에도 사용. (ex : postDelayed())
아래를 광고 배너를 1초마다 변경하는 코드이다.
package com.example.testhandler;
import androidx.appcompat.app.AppCompatActivity;
import android.media.Image;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
// ImageView광고 베너 변수
ImageView adverTiseBanner;
// 인덱스의 시작은 0부터 시작한다.
int index = 0;
// 변경할 이미지 3개를 int배열로 저장한다.
int[] images = {R.drawable.num1, R.drawable.num2, R.drawable.num3}; // 이미지 리소스 ID 배열;
// 핸들러 변수 정의
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// xml에 ID를 확인해서 adverTiseBanner에 연결
adverTiseBanner = findViewById(R.id.imageView);
// handler를 정의한다.
handler = new Handler(Looper.myLooper());
// runnable을 정의한다.
Runnable runnable = new Runnable() {
@Override
public void run() {
// 이미지 변경
adverTiseBanner.setImageResource(images[index]);
// 다음 이미지 인덱스 계산
index = (index + 1) % images.length;
// 1초 후 다시 실행
handler.postDelayed(this, 1000);
}
};
// runnable을 handler로 시작
handler.post(runnable);
}
}
png이미지는 drawable폴더에 넣으면 됩니다.
gitHub : https://github.com/Alex-Choi0/android_excercise_handler.git
댓글
댓글 쓰기