[Android] Thread 알아보기

Jinny·2021년 3월 3일
0

Android

목록 보기
14/32
post-thumbnail

🚩 Thread

  • 하나의 프로세스가 처리하는 작업 단위를 뜻한다.
  • '실' 이라고 부른다 --> 작업의 흐름을 선으로 그었을 때 모양이 실 같아서
  1. 싱글 스레드
    : 흐름이 1개다. 이작업이 수행되는 동안 다른 작업은 수행 불가.

  2. 멀티 스레드
    : 흐름이 여러개다. 각 스레드 작업들을 프로세서가 번갈아 가며 수행 한다. (병렬 처리)
    즉, 동시에 여러작업이 가능하다.

💡 안드로이드에서 스레드의 주 용도

  1. Main Thread
    : UI(뷰)를 담당함 ( oncreate() 부터 ondestroy() 까지 담당 )

  2. Background Thread
    : 메인 스레드에 종속되어 background에서 돌아가는 스레드! 두가지 종류가 있다.
    - eventListener (onClickListener onTouchListener등의 익명함수들)
    : 이벤트가 발생할 것을 주시하는 스레드


    - 통신(http/s) (아주 중요!!!)
    : 통신은 메인스레드에서 작업하면 에러 나니 반드시 백그라운드로 작업해야 한다.
    왜? 메인스레드는 뷰 담당이니까!
    사용자와 가장 가깝기 때문에 불편함을 느끼지 않게 해야 한다.
    하지만 메인으로 돌리는 경우 해당 작업이 완료될 때 까지 사용자는 화면 터치도 못하고,, 기다려야하니껜..
    예전에는 가능했지만 이제는 메인스레드에서 실행 시 app 이 꺼져버륌

💡 Thread를 추가하는 방법

(순수 자바의 방법)
- java.lang.Thread 클래스, java.lang.Runnable 클래스 중 둘 중 하나를 상속받아서 사용한다.

🚩 Thread 실습

//스레드에서 하고 싶은일은 Runnable에 담고 얘를 Thread에 넣어주면 됨
val runnable: Runnable = object  : Runnable{
	override fun run() {
  		Log.d("thread","스레드가 만들어짐!")
	}
}
//스레드를 만들기
val thread : Thread = Thread(runnable)

//스레드를 실행 시킴!
thread.start()

위와 같이 작성한 코드를 더 줄여서 쓸 수도 있다.

//람다x 버전
Thread(object :Runnable{
	override fun run() {
    	Log.d("thread-1","Thread is made 2!")
	}
}).start()

//람다 버전
Thread(Runnable {
	Log.d("thread-1","Thread is made 3!")
}).start()

💡 만약 Main Thread가 아닌 Thread에서 UI 접근하려면
runOnUiThread 내에서 접근 해야 한다.

runOnUiThread {
   	//UI에 접근하려는 경우
   	//main스레드가 아니면 UI접근이 안되니 이렇게 접근해야함!
	btn.setBackgroundColor("#FFFFFF")
}

출처 : 썸네일 이미지 출처
profile
신입 개발자👩‍💻

0개의 댓글