728x90
Thread는 여러 처리를 비 동기적으로 처리하기 위해 사용한다.
안드로이드는 비 동기적 처리 외에 네트워크에 관련된 코드는 전부 Thread로 운영해야 한다.
본 강좌에서는 안드로이드에서의 Thread 운영 방법을 살펴보도록 한다.
Main Thread와 사용자 Thead
안드로이드는 Activity의 코드를 처리하기 위해 Thread를 발생 시킨다
이 때 발생되는 Thread를 Main Thread라고 부르며 UI Thread라고 부르기도 한다.
Main Thread가 현재 어떠한 처리도 하지 않고 유휴 상태일때만 화면 작업이 가능하다.
이 때문에 오래 걸리는 작업은 별도의 Thread를 발생시켜 처리하고 Main Thread를 항상 유휴 상태로 유지하게 해야 한다.
화면처리
안드로이드는 개발자가 발생 시킨 Thread에서 화면에 대한 처리를 하면 오류가 발생한다.
이 때문에 Thread 운영에 대한 처리를 학습해야 한다.
현재 안드로이드 오래오(8.0) 이상 부터는 개발자가 발생 시킨 Thread에서 화면 처리가 가능하다.
허나 OS 버전이 변경되면서 상황은 달라질 수도 있고 하위 버전을 위해 화면 처리는 반드시 Main Thread에서 하는 것이 좋다.
package com.example.thread
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.SystemClock
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
var isRunning = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val now = System.currentTimeMillis()
textView.text = "버튼 클릭 : $now"
}
// while (true) {
// SystemClock.sleep(100)
// val now2 = System.currentTimeMillis()
// Log.d("test","while ans : $now2")
// }
isRunning = true
// val thread1 = object : Thread() {
// override fun run() {
// super.run()
// while (isRunning) {
// SystemClock.sleep(100)
// val now2 = System.currentTimeMillis()
// Log.d("test","while ans : $now2")
// textView2.text = "Thread : $now2"
// }
// }
// }
// thread1.start
thread {
while (isRunning) {
SystemClock.sleep(100)
val now2 = System.currentTimeMillis()
Log.d("test","while ans : $now2")
textView2.text = "Thread : $now2"
}
}
}
override fun onDestroy() {
super.onDestroy()
isRunning = false
}
}
728x90
'안드로이드 > Thread' 카테고리의 다른 글
안드로이드 RunOnUiThread (0) | 2022.06.16 |
---|---|
안드로이드 Handler를 통한 화면 처리 (0) | 2022.06.16 |
Handler를 이용한 반복 작업 (0) | 2022.06.16 |