안드로이드 스레드에 대한 공부 (작성중)
https://developer.android.com/guide/components/processes-and-threads?hl=ko
프로세스 및 스레드 개요 | Android 개발자 | Android Developers
프로세스 및 스레드 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 애플리케이션 구성 요소가 시작되고 애플리케이션에 실행 중인 다른 구성 요소가
developer.android.com
4주차 과제인 멀티 스레드에 대해 공부해보기로 했다.
- Thread
스레드는 뭘까? 무언가의 흐름 ?
스레드는 동시에 여러작업을 수행하기 위해 사용된다.
메서드의 경우, 하나의 작업이 모두 끝나면 다음 작업이 진행되지만 스레드는 하나의 작업이 끝나기 전에 다른 작업을 동시에 진행할 수 있다.
class MainActivity : AppCompatActivity() {
val TAG: String = "로그"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Thread() {
}.start()
for(i in 0 until 100){
Log.d(TAG, "Thread 1 :$i")
}
Thread() {
for(i in 100 downTo 0) {
Log.d(TAG, "Thread 2 :$i")
}
}.start()
}
}
스레드를 확인하기 위한 예제. 스레드 2개를 생성하였다.
스레드1이 1~100까지 반복문을 돈 후, 스레드2가 시작되는 것을 확인할 수 있다.
class MainActivity : AppCompatActivity() {
val TAG: String = "로그"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var handler = Handler(Looper.getMainLooper())
Thread() {
for(i in 0 until 100){
Log.d(TAG, "Thread 1 :$i")
}
}.start()
Thread() {
for(i in 100 downTo 0) {
Log.d(TAG, "Thread 2 :$i")
}
}.start()
}
}
다음은 스레드를 동시에 실행시켜보았다.
스레드1이 끝나기도 전에 스레드2가 실행되며 동시에 실행되고 있는 것을 확인할 수 있다.
싱글 스레드 멀티 스레드가 무조건 좋은 것은 아니다.
가벼운 작업은 멀티스레드를 사용하면 낭비가 될 수 있지만 무거운 작업은 멀티 스레드가 유용할 것이다.
예시로 든다면 싱글스레드는 턴제 게임 ( 고스톱, 포커 등 카드게임 )
멀티스레드는 서로의 행동에 영향을 받지않는 RPG 게임과 유사하다 볼 수 있을 것 같다.
- Handler ?
다른 객체들이 보낸 데이터를 받고 처리하는 객체이다.
스레드에서 UI를 제어하려고 할 땐 핸들러가 사용되며, 핸들러를 사용하면
원래 스레드가 아닌 다른 스레드에서도 뷰를 다룰 수 있다!