전체 글
-
LiveData beyond the ViewModelAndroid 2021. 6. 4. 10:41
LiveData beyond the ViewModel - Reactive patterns using Transformations and MediatorLiveData을 요약, 정리하였다. LiveData beyond the ViewModel — Reactive patterns using Transformations and MediatorLiveData Reactive architecture has been a hot topic in Android for years now. It’s been a constant theme at Android conferences, normally… medium.com LiveData는 Observer의 수명주기를 알고있는 simple observable이다. data so..
-
LiveDataAndroid 2021. 5. 30. 16:53
LiveData란 LiveData는 observable data holder class로 안드로이드 Lifecycle에 따라 데이터를 관리한다. 예를 들어 Activity에 선언되어 있는 LiveDate의 경우 Activity의 생명주기가 Started, Resumed 상태이면 데이터의 변경을 처리하지만 다른 Activity로 넘어가있는 Stoped등의 상태일 때는 처리하지 않는다. 구글 문서를 참고하면 아래와 같은 장점을 확인할 수 있다. UI와 데이터 상태의 일치 보장 : observable 패턴을 사용하기 때문에 데이터의 변화를 observer 객체에 알리다. 메모리 누수 없음 : observer는 lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제된다. 최신 데이터 ..
-
Android Kotlin Fundamentals - ViewModel(2)Android 2021. 5. 30. 09:37
Activity ViewModel을 활용한 Fragment 간 데이터 공유 Fragment가 N 개인데, Data의 공유가 필요한 경우 Fragment에서 처리한 데이터에 따라 Activity의 데이터 갱신이 필요한 경우 보통 위와 같은 이유로 sharedViewModels를 사용하는 케이스가 있다. 1. fragment-ktx를 사용하지 않을 경우 SharedViewModel, Fragment들을 아래와 같이 간단하게 구현 class SharedViewModel : ViewModel() { val message = MutableLiveData() fun sendMessage(msg:String){ message.value = msg } } class MessageReceiverFragment:Fragm..
-
Android Kotlin Fundamentals - ViewModel(1)Android 2021. 5. 29. 13:49
Android Kotlin Fundamentals: 5.1 ViewModel 을 요약, 정리하였다. (자세한 내용은 codeLab 사이트를 참고) GameViewModel 구현 build.gradle(module:app) 파일에 다음 dependencies를 추가한다. (최신 버전은 문서를 참고) dependencies { // implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' // implementation 'androidx.fragment:fragment-ktx:1.3.4' } ViewModel 클래스를 상속하는 GameViewModel을 정의한다. class GameViewModel:ViewModel() { override fun ..
-
ViewModelAndroid 2021. 5. 28. 13:27
ViewModel 클래스는 lifecycle를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었다. ViewModel 클래스를 사용하면 화면 회전과 같이 구성을 변경할 때도 데이터를 유지할 수 있다. ViewModel 생명주기 ViewModel은 Activity에서는 Activity가 끝날 때까지 그리고 Fragment에서는 Fragment가 분리될 때까지 메모리에 남아 있다. Activity의 경우 기기 화면이 회전될 때와 같이 onCreate() 메서드가 여러 번 호출될 수 있지만 ViewModel은 소멸되지 않고 계속 유지된다. ViewModel은 ScopeOwner가 Destroyed 상태가 되면 onCleared()를 호출하여 ViewModel을 Release한다. ViewModel 구현..
-
Kotlin Coroutines(3)Kotlin 2021. 5. 27. 10:50
코루틴 블록 취소 delay() 함수 사용 delay() 함수에서 취소가 동작하고 코루틴 블록을 취소할수가 있다. fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) println("main: I'm tired of waiting!") job.cancel() job.join() println("main: Now I can quit.") } 결과 job: I'm sleeping 0 ... job: I'm sleeping 1 ... job: I'm sleeping 2 ... main: I'm tired of waiting! ma..
-
Kotlin Coroutines(2)Kotlin 2021. 5. 26. 14:35
코루틴 제어 코루틴을 시작하는 방법은 두 가지가 있으며 용도가 다릅니다 launch() 함수로 시작된 코루틴 블록은 Job 객체를 반환, 결과값을 반환하지 않는다. async() 함수로 시작된 코루틴 블록은 Deferred를 반환, await라는 일시 중지 함수로 결과를 반환한다 launch() - Job 반환받은 Job 객체로 코루틴 블록을 취소하거나, 다음 작업의 수행전 코루틴 블록이 완료 되기를 기다릴수 있다. fun main() = runBlocking { val job = launch { // launch a new coroutine and keep a reference to its Job delay(1000L) // non-blocking delay for 1 second (default ti..
-
Kotlin Coroutines(1)Kotlin 2021. 5. 22. 10:25
코루틴, Coroutines? Coroutines = Co + Routines Co는 협력을 Routines는 function을 의미한다. Kotlin Coroutines 특징 Asynchronous Cooperative multitasking Single-threaded Non-blocking 기본 개념 CoroutineScope 코루틴의 범위, 코루틴 블록을 묶음으로 제어할수 있는 단위 launch 또는 async를 사용하여 생성한 모든 코루틴을 추적한다. (launch, async는 CoroutineScope의 확장 함수) 실행중인 코루틴은 언제든지 scope.cancel()을 호출하여 취소할 수 있다. Android와 같은 일부 플랫폼에는 이미 viewModelScope, lifecycleScop..