월루를 꿈꾸는 대학생

[Kotlin] 워커스래드 Timer , runOnUiThread , 스크롤뷰 본문

Programing/Kotlin

[Kotlin] 워커스래드 Timer , runOnUiThread , 스크롤뷰

하즈시 2023. 1. 26. 19:33
728x90

timer  : 백그라운드 실행 

runOnUiThread :  메인 스레드 ui갱신 

뷰바인딩 

 


뷰바인딩 

- build.gradle - module

 

android {
    buildFeatures{
        viewBinding true
    }

 


 

제약 레이어에서 다른 컴포넌트들과 정렬을 할 때

우클릭 > show baseline 

이 상태에서 다른 위젯의 베이스라인이랑 이어주면 연결 가능 

 

 

timer

- 일정한 시간을 주기로 반복하는 동작 때 사용 

 

스레드 

- 메인 스레드 : 메인 ui 조작 

- 워커 스레드 : 여러 시간이 걸리는 작업들을 백단에서 처리 

- 워커 스레드에서는 ui 조작이 안 되기 때문에 runOnUiThread() 사용  -> timer = 워커 스레드 

 

timerTask = timer(period = 10) {
            time++
            val sec = time / 100
            val milli = time % 100
            // 0.01초 마다 워커 스레드에서 ui 변경을 위해 runOnUiThread함수가 사용됨
            // 사용자각 보기엔 스탑워치처럼 시간이 실시간으로 변경됨
            runOnUiThread() {
                binding.setTextView.text = "$sec"
                binding.milliTextView.text = "$milli"
            }

 

워커스래드의 타이머를 제거 

timerTask?.cancel()

 

 

LinearLayout 에 자식 뷰 추가할 때 addView()

 // 해당 함수가 실행할 때마다 텍스트뷰가 동적 생성
        val textView = TextView(this)
        textView.text = "$lap LAP : ${lapTime / 100}.${lapTime % 100}"
        // 해당 텍스트 뷰를 레이아웃에 추가되도록  맨위에 추가
        // 리니어 스크린은 차례차례 쌓여짐 즉 쌓이는 거는 역순임
        binding.lapLayout.addView(textView, 0)

자식 뷰 삭제

// 해당 스크롤뷰에 있는 뷰들을 다 삭제
binding.lapLayout.removeAllViews()

 

 

참고

- 오준석의 안드로이드 생존코딩

728x90