월루를 꿈꾸는 대학생
[Kotlin] 워커스래드 Timer , runOnUiThread , 스크롤뷰 본문
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
'Programing > Kotlin' 카테고리의 다른 글
[Kotlin] 뷰바인딩 , 인텐트 , 토스트 메세지 , SharedPreference (0) | 2023.01.26 |
---|---|
[Kotlin] 액티비티 및 기초 (0) | 2023.01.26 |