본문 바로가기
android

Thread - 화면 변경하기(초시계)

by 윈 Win 2021. 1. 22.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Android] Thread - 화면 변경하기(초시계) — Win Record (tistory.com)

 

 


 

Thread

Thread
1. 실
2. (이야기 등의) 가닥, 맥락

-네이버 사전

 

프로세스 내에서 순차적으로 실행되는 실행흐름의 최소 단위

- 개발자를 위한 레시피

 

 


Runnable 인터페이스로 초시계(time watch) 구현하기

코드 흐름 :

TimeWatchRunnable클래스 생성(handler를 사용해 화면에 1초마다 초가 증가)

start 버튼 클릭

TimeWatchRunnable를 가진 thread 생성 및 실행(start())

thread 실행되며 1초마다 숫자 1씩 증가

stop 버튼 클릭

thread 중지(intterupt())

 

비슷한 흐름으로 숫자가 아닌 이미지를 변경할 수도 있다.

(이미지 변경 관련 코드는 다음 글에서 확인 가능)

 

 

TimeWatchRunnable 클래스

 

class TimeWatchRunnable implements Runnable {
    @Override
    public void run() {
        int value = 0;
        handler.post(new Runnable() {
            @Override
            public void run() {
                tvCount.setText("0");
            }
        });
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                Log.d("Thread", "status: interrupted");
                return;
            }
            value += 1;
            Log.d("Thread", "value: " + value);
            int finalValue = value;
            handler.post(new Runnable() {
                @Override
                public void run() {
                    tvCount.setText(String.valueOf(finalValue));
                }
            });
        }
    }
}

 

 

start, stop 버튼 클릭 이벤트

 

@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_timewatch_start:
            btnStart.setVisibility(View.GONE);
            btnStop.setVisibility(View.VISIBLE);
            if (thread == null)
                thread = new Thread(new TimeWatchRunnable());
            thread.start();
            break;
        case R.id.btn_timewatch_stop:
            btnStart.setVisibility(View.VISIBLE);
            btnStop.setVisibility(View.GONE);
            thread.interrupt();
            thread = null;
            break;
        
        ...
    }
}

 

 


결과화면

초시계 결과 화면

 

 


전체 코드

ThreadPractice

 

 


다음 글

Thread - 이미지 바꾸기

 


참고자료

안드로이드 스레드(Android Thread) :: 개발자를 위한 레시피 (tistory.com)

안드로이드 스레드 예제. 스레드로 고민해보기. (Android Thread UseCase) :: 개발자를 위한 레시피 (tistory.com)

 

 

 

공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.

댓글