반응형
Notice
Recent Posts
Recent Comments
Link
불로구
안드로이드(Kotlin) - LiveData 본문
반응형
LiveData
-> Data의 변경을 관찰 할 수 있는 Data Holder 클래스
-> LiveData는 Observable과 다르게 안드로이드의 생명주기를 알고 있다.
-> 활성상태에서만 데이터를 업데이트
-> LiveData는 Observer 객체와 같이 사용하여 LiveData가 가지고 있는 데이터에 변화가 발생 시 Observer 객체에 알려주고 Observer의 onChanged() 메서드 실행
liveText.observe(this, Observer{
text_test.text = it
})
this는 클래스를 가리키는 LifeCycleOwner 클래스가 안드로이드 생명주기를 알고 있다.
장점
-> Data와 Ui 동기화 : 옵저버 패턴을 이용하여 데이터 변경 마다 Observer 객체에 전달
-> 메모리 누수 방지 : 옵저버 객체를 통해 Destroy될 경우 메모리를 스스로 해제
-> Stop 상태 액티비티와 크래쉬 발생 방지 : 옵저버의 생명주기가 비활성인 경우 LiveData 이벤트 수신x
-> 항상 최신 데이터 유지
-> 자원 공유
사용법
-> Generic을 사용하여 관찰할 데이터의 타입을 갖는 LiveData 생성
-> 옵저버 객체 생성
package com.example.livedata
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
class MainActivity : AppCompatActivity() {
// private var liveText : MutableLiveData<String> = MutableLiveData<String>().apply{
// value = "Hello World ${++count}"
// }
private var count = 0;
private var liveText : MutableLiveData<String> = MutableLiveData<String>().set("Hello World ${++count}")
private val text_test:TextView by lazy{
findViewById<TextView>(R.id.text_test)
}
private val btn_change:Button by lazy{
findViewById<Button>(R.id.btn_change)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
liveText.observe(this, Observer{
text_test.text = it
})
btn_change.setOnClickListener {
liveText.value = "Hello World ${++count}"
}
}
}
private fun MutableLiveData<String>.set(value:String) : MutableLiveData<String>{
this.value = value
return this
}
반응형
'프로그래밍 > 코틀린 안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 - Fragment<프레그먼트> ( 실습편1 ) (0) | 2021.04.12 |
---|---|
안드로이드 스튜디오 - Fragment<프레그먼트> ( 개념편 ) (0) | 2021.04.12 |
안드로이드 스튜디오 - 다이어리 만들기 (0) | 2021.03.28 |
안드로이드 스튜디오 - px , dp , sp단위 (0) | 2021.03.25 |
안드로이드 스튜디오 - 데이터 저장 sharedpreferences (0) | 2021.03.23 |
Comments