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






























댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기