GUI 시스템에서 UI 갱신
GUI 시스템에서는 main thread 만 UI 갱신이 가능
하나의 메소드 안에서 UI 를 갱신하는 코드와 다른 코드가 같이 존재하면 UI 를 갱신하는 코드는 비동기적으로 동작합니다.
비동기: 현재 작업을 처리하는 도중에 다른 작업을 처리할 수 있는 방식
하나의 메소드 안에 UI 를 갱신 하는 코드가 여러개 존재하면 모아서 한꺼번에 처리합니다.
Logcat
안드로이드에서 로그를 출력하고자 할 때 System.out.print 나 print 를 사용 할 수 없습니다.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import kotlinx.android.synthetic.main.activity_main2.*
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
val clickListener : View.OnClickListener = object : View.OnClickListener{
override fun onClick(v: View?) {
var btn : Button = v as Button
label.setText("${v?.text} 누름")
}
}
// 이벤트 라우팅
button1.setOnClickListener(clickListener)
button2.setOnClickListener(clickListener)
button3.setOnClickListener(clickListener)
var i = 0
while (i<10){
// TextView 의 텍스트 변경
label.text = "${i}"
// 로그를 출력
Log.e("i", "${i}")
i = i + 1
// 1초 씩 대기
Thread.sleep(1000)
Log.e("x", "y")
}
/*
button1.setOnClickListener {
label.text = "버튼 1을 눌렀습니다."
}
*/
}
}
UI 를 주기적으로 갱신
Thread 와 Handler 를 이용하는 방법Timer 를 이용
val 이름:CountDownTimer = object.CountDownTimer(전체 시간, 주기){
// 주기적으로 호출하는 메소드
override fun onTick(millisUntilFinished:Long){
주기적으로 수행할 내용
}
//타이머 종료 후 호출하는 메소드
override fun onFinish(){
마지막에 수행할 내용
}
}
이름.start() // 시작
이름.calcel() // 중지
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.CountDownTimer
import android.view.View
import android.widget.Button
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main2.*
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
val clickListener : View.OnClickListener = object : View.OnClickListener{
override fun onClick(v: View?) {
var btn : Button = v as Button
label.setText("${v?.text} 누름")
}
}
// 이벤트 라우팅
button1.setOnClickListener(clickListener)
button2.setOnClickListener(clickListener)
button3.setOnClickListener(clickListener)
val timer:CountDownTimer =
object:CountDownTimer(10000, 1000) {
var x : Int = 0
// 주기적으로 호출 되는 메소드
override fun onTick(millisUntilFinished: Long) {
label.text = "${x}"
x = x + 1
}
// 타이머 수행이 종료되면 호출되는 메소드
override fun onFinish() {
Toast.makeText(this@MainActivity2, "완료",
Toast.LENGTH_LONG).show()
}
}
timer.start()
}
}
'안드로이드' 카테고리의 다른 글
안드로이드 : 진동과 사운드 (0) | 2020.10.28 |
---|---|
안드로이드 : 버전 별 다른 코드 작성 (0) | 2020.10.27 |
안드로이드 : 레이아웃과 이벤트 처리 (0) | 2020.10.27 |
안드로이드 : 화면 출력 (0) | 2020.10.26 |
안드로이드 프로젝트 구성 (0) | 2020.10.22 |