Android : thread와 postDelayed 실행(지연처리)

hjseo-dev·2022년 1월 4일
0

Android

목록 보기
7/18

Thread 란?

프로세스가 시작될 때, 최초의 실행 시작점이 되는 main() 함수, 그리고 그 곳부터 순차적으로 진행되는 실행 흐름, 이 또한 하나의 스레드이며, 메인 스레드(Main Thread)라고 부른다

1) 스레드를 만드는 방법 1

Thread 클래스를 상속(extends)한 클래스를 만들고 run() 메서드를 오버라이드(override)한 다음, 클래스 인스턴스를 생성하고 start() 메서드를 호출

  class NewThread extends Thread {
        NewThread() {

        }

        public void run() {
            // TODO : thread running codes.
        }
    }

    NewThread nt = new NewThread() ;
    nt.start() ;

2) 스레드를 만드는 방법 2

Runnable 인터페이스를 구현(implements)하는 클래스를 선언하고 run() 메서드를 구현한 다음, 클래스 인스턴스를 Thread 클래스 인스턴스의 생성자에 전달하고 Thread 클래스 인스턴스의 start() 메서드를 호출

   class NewRunnable implements Runnable {
        NewRunnable() {

        }

        public void run() {
            // TODO : thread running codes.
        }
    }

    NewRunnable nr = new NewRunnable() ;
    Thread t = new Thread(nr) ;
    t.start() ;

Q. 스레드 만드는 방법 두가지의 차이점은?

  • 첫번째 방법, thread 메서드를 상속(extends)하는 방법은 비효율적 일 수 있다! > why?
    위의 방법에서는 run() 메소드만을 override한다. 다른 기능들도 재사용 되어야 하는데, 하나만 사용하는 것은 좀 비효율적인 느낌이다.
    그리고 한번에 하나씩 상속되는 특성에 따라, Thread가 아닌 다른 클래스를 상속해야 한다면, 다중상속이 허용되지 않는 자바에서 Thread 클래스를 상속(extends)하여 스레드를 만드는 것이 불가능하다!

  • 두번째 방법, Runnable 인터페이스룰 사용하면, abstract로 선언된 단 하나의 메서드, run() 메서드만을 가지기 때문에 효율적일 수 있다. 하지만 run()이외에 다른 것을 쓰려면 thread 메서드가 필요하다!

Android의 메인 스레드

안드로이드 앱의 메인 UI 스레드 동작은 루프(Loop)와 핸들러(Handler) 클래스 구현을 통해 메인 UI 스레드를 작성할 수 있게 해준다.

  • Handler : 메시지 수신 시 그 처리를 담당, Handler는 Looper가 가진 메시지 큐(Message Queue)를 다룰 수 있기 때문에, 새로운 메시지를 보내거나, 수신된 메시지에 대한 처리를 담당하는 주체가 되는 것

postdelayed 사용

안드로이드 앱 개발 시 일정시간 지연 후 무엇인가를 실행해야 하는 경우에 쓰는 방법이다.

import android.os.Handler;

Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 1000) //1초 후 실행
 
Handler(Looper.getMainLooper()).postDelayed({
    //Do something
}, 4000) //위쪽 코드 실행 후 3초 후 실행

작업을 일정한 시간 후에 실행해야 할 경우 넣어주면 좋다!

추가로, 일정시간 동안 멈추는 상태

Thread.sleep(1000);

출처 : https://recipes4dev.tistory.com/143

0개의 댓글