1000sj
SJ CODE
1000sj
전체 방문자
오늘
어제
  • 분류 전체보기
    • Algorithms
      • Crypto
    • Security
      • 네트워크
      • 보안
      • CTF
      • Exploit
    • System Programming
      • Operating System
      • Compiler
      • Device Driver
      • Emulator
      • Parrelel Processing
      • Assembly
    • Application Programming
      • Script
      • Android
    • Cloud Computing
      • Cloud Native
      • Public Cloud
      • Infrastructure
      • Database
      • DevOps
    • TroubleShooting
    • ETC
      • 문화 생활
      • 커뮤니티

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
1000sj

SJ CODE

Application Programming/Android

[Android/Kotlin] Live Data

2021. 6. 28. 16:52

Live Data는 Data를 저장하고 변화를 관찰할 수 있는 객체이다. Observer를 구독하면 Data가 변경될 때마다 UI를 업데이트할 수 있다. 일반 Observable Class와 달리 Live Data는 수명주기를 인식한다. 수명주기 인식을 통해 Activity 수명주기 상태에 있는 앱 컴포넌트 Observer만 업데이트 한다. 관찰자의 수명주기가 STARTED 또는 RESUMED 상태에서만 옵저버에게 데이터 변경을 알린다. 

 

LifecycleOwner 인테페이스를 구현하는 객체와 페어링된 관찰자를 등록할 수 있다. 이 관계를 사용하면 관찰자에 대응되는 LifeCycle 객체의 상태가 DESTROYED로 변경될 때 관찰자를 삭제할 수 있다. 특히 Activity와 Fragment가 LiveData 객체를 안전하게 관찰할 수 있고 Activity와 Fragment의 수명 주기가 끝나는 즉시 수신 거부되어 누수를 걱정하지 않아도 되므로 유용하다.

 

1. build.gradle

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

 

 

2. ViewModel 생성(LiveData 객체)

class MyNumberViewModel : ViewModel() {

    // 뮤터블 라이브 데이터 - 수정 가능
    private val _currentValue = MutableLiveData<Int>()

    // 라이브 데이터 - 수정 불가능, observer에 노출
    // 라이브 데이터 캡슐화 
    val currentValue: LiveData<Int>
        get() = _currentValue
        
    // 초기화
    init {
        Log.d("MyNumberViewModel", "생성자 호출")
        _currentValue.value = 0
    }
}

 

3. LiveData 객체 관찰

onCreate() 메서드에서 호출한다.

ViewModelProvider를 사용하여 View model을 가져온다.

(by viewModels()를 사용하는 방법 도 있는데 그건 gradle 추가 해줘야 한다.)

 

class ViewModelActivity : AppCompatActivity(){

    // 나중에 값이 설정될거라고 lateinit 으로 설정
    lateinit var myNumberViewModel: MyNumberViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_viewmodel)
        
        // view model instance가져옴
        myNumberViewModel = ViewModelProvider(this).get(MyNumberViewModel::class.java) 
        
        // view model이 가지고 있는 live data에 접근 값이 변경되면 바로 알 수 있다
        myNumberViewModel.currentValue.observe(this, Observer {
            tv_result.setText(it.toString())
        })
    }

}

 

4. Live data 객체에 업데이트 함수 생성하고 main에서 호출할 수 있다

 

 

 

 

- [참고](https://developer.android.com/topic/libraries/architecture/livedata?hl=ko)

'Application Programming > Android' 카테고리의 다른 글

[Android/Java] Fragment간 값 전달  (0) 2021.06.28
[Android/Java] BlankFragment  (0) 2021.06.28
[Android/Java] naver map api  (0) 2021.06.19
[Android/Firebase] Firebase 연동  (0) 2021.06.16
[Android/Java] 지나가는 비행기  (0) 2021.06.14
    'Application Programming/Android' 카테고리의 다른 글
    • [Android/Java] Fragment간 값 전달
    • [Android/Java] BlankFragment
    • [Android/Java] naver map api
    • [Android/Firebase] Firebase 연동
    1000sj
    1000sj

    티스토리툴바