본문 바로가기

Android/Android Development16

Android ViewModel에서 Context를 올바르게 사용하는 방법 MVVM 구조로 안드로이드 개발을 진행하다 보면, ViewModel이나 Model에서 Context가 필요한 경우가 있다. 하지만, ViewModel의 Lifecycle이 Activity나 Fragment의 Lifecycle보다 길기 때문에 Activity/Fragment의 context를 ViewModel이 참조하고 있으면 안 된다. 왜 안 되는지에 대한 이유와 어떻게 사용할 수 있을지에 대해 정리해본다. Lifecycle의 차이 예를 들면, 화면 rotation이 발생하면 Activity는 destroy되고 다시 생기는데, ViewModel은 이 경우에도 Activity가 완전히 종료되기 전까지는 유지된다. 그러므로 ViewModel이 Activity의 context를 받아서 계속 사용한다면, Act.. 2022. 8. 8.
LiveData와 Kotlin의 Flow LiveData와 Flow가 뭔지 정리해보고 어떻게 사용하는 지에 대해 알아본다. 추가로, 두 가지가 유사하면서도 다른 점들이 있기에 주요한 차이점과 적절한 사용법도 알아보자. LiveData & Flow LiveData는 안드로이드 앱 개발에서 일반적인 작업인 데이터 전송의 한 방법이다. Kotlin Flow도 데이터를 전송하는 것이며 비동기로 전송할 수 있는 기능이 있다. 두 가지 방법 모두 기존의 전통적인 문제를 극복하기 위해 설계되었으며, 장점과 더불어 한계점도 있다. LiveData 관찰 가능한 데이터 홀더 클래스, 다른 안드로이드 컴포넌트들(activity, fragment, service)에 의해 관찰될 수 있는 데이터들의 집합이라고 생각하면 된다. 관찰 가능한 다른 일반 클래스들과 다른 점.. 2021. 11. 14.
DataStore of Android Jetpack DataStore란? Data Storage Solution이다. Kotlin으로 만들어졌으며, Coroutines와 Flow를 정식 지원하여 async한 작업이 가능 SharedPreferences의 새 버전이라고 생각해도 된다. Why DataStore? Kotlin, Coroutines, Flow 정식 지원 SharedPreferences는 sync API를 지원하며, Main-thread-safe하지 않다. DataStore는 Dispatchers.IO를 사용하기 때문에 Main-thread에서 사용하기에 안전하다. runtime exception들로부터 안전하다. SharedPreferences로부터의 migration을 제공 Type Safety 제공 Implementation DataStor.. 2021. 10. 24.
Android LiveData setValue vs postValue LiveData(MutableLiveData)에서 setValue()와 postValue()를 사용하는 경우를 종종 헷갈려하는 사람들이 있어서 간단하게 정리해두려 한다. LiveData는 일반적으로 DataBinding, ViewModel과 함께 사용한다. 값을 변경하는 두 방법의 차이점과 자신이 개발하고 있는 구조를 제대로 파악하지 못하면 필요할 때 UI 변경이 제대로 발생하지 않을 수 있다. 복잡하거나 어렵지는 않으니 간단하게 확인해두면 된다. setValue() 값을 바로 설정한다. 활성화된 observer가 있는 경우 해당 값이 observer로 dispatch된다. 사용에 있어 주의해야 할 점이 있는데 setValue는 반드시 Main Thread(UI Thread)에서 호출해야 한다. back.. 2021. 10. 21.
Android Custom Lint Checks Lint란? 먼저 Lint가 무엇인지를 정리해본다. Android Lint는 앱을 구성하는 코드(소스, 리소스, manifest를 포함)들을 정적 분석하는 도구이다. Test Code의 작성 없이 코드의 구조적 품질 문제를 식별하고 수정할 수 있다. Lint 검사 도구에서 감지된 각 문제는 설명 메시지 및 심각도 수준과 함께 보고되므로 개선이 시급한 순서대로 우선순위를 정할 수 있다. lint.xml 파일은 제외하려는 린트 검사를 지정하고 문제 심각도 수준 등을 변경하여 맞춤 설정하는 데에 사용할 수 있는 구성 파일이다. Lint의 결과는 Android Studio의 Inspection Results 창에서 린트 결과를 확인하거나 커맨드를 통한 수동 검사를 실행하여 결과를 확인할 수 있다. 물론 CI/C.. 2021. 8. 22.
Google I/O '21 Google I/O '21을 진행한지 기간이 조금 지났지만, 늦게나마 일부 내용을 정리해두려고 한다. 이 글의 밑 쪽에 관련 영상과 문서의 링크가 추가되어 있다. 이 글은 어떤 내용들이 있는지를 간략하게 정리해두고, 필요하거나 관심이 있는 내용들을 파악해서 어떤 것을 더 찾아봐야할 지 결정할 수 있도록 하는 데 목적을 둔다. What's new in Android Android 역사상 가장 큰 규모로 디자인이 변경되었다. 색상, 모양, 빛, 모션에 이르기까지 모든 환경이 새롭게 디자인되었다. 유저 인터페이스 먼저, 색상에 많은 신경을 썼는데 사용하는 시스템 색상 팔레트를 더 풍부하고 폭넓게 제공하여 유저가 배경화면이나 색상을 선택함에 따라 앱에서 사용하는 색상도 자동으로 맞춰져서 동작할 수 있다. 물론 .. 2021. 6. 20.