Android/Component
[Android] Fragment 커스텀 생성자? FragmentFactory?
인자를 전달받는 Fragment 생성자 Fragment를 생성할 때 파라미터를 전달받는 생성자를 이용하여 Fragment를 만들어 본 적이 있는가? 아래 코드와 같은 방식으로 Fragment 정의 시 분명 문제가 있었을 것 이다. 아래 Fragment는 문자열을 생성자의 인자로 전달받는 Fragment이다. class TestFragment constructor ( private val testString:String ): Fragment() { ... } 이러한 방식은 아래와 같은 런타임 예외를 발생 시킬 수 있다. 분명 Fragment의 생성자가 있음에도 불구하고 생성자가 없다는 예외이다. could not find Fragment constructor 런타임 예외가 왜 발생하는가? Fragment ..
[Android] MutableFlowState의 원자성 보장
정리하기 앞서 안드로이드 클린 아키텍처에 관해 공부 및 코드 분석을 진행하던 중 궁금한 부분이 생겼다. UI와 ViewModel의 상태를 data class와 MutableStateFlow를 겹합하여 상태를 관리하는 구조를 확인할 수 있었다. Data class는 copy 함수를 제공하여 클래스의 프로퍼티들을 하나 이상을 동시에 업데이트하면서 업데이트 하지 않는 나머지 값은 보존할 수 있는 기능을 제공한다. 이 때, 구글 안드로이트 팀에서 제공하는 클린 아키텍처 예제코드에서 MutableStateFlow에 결합된 data class의 프로퍼티를 value가 아닌 update 함수를 이용하는 것을 확인할 수 있었다. data class AddEditTaskUiState( val title: String =..
ViewModel의 DataEvent 처리 방법 #1. LiveData
LiveData란? (간략히 정리하기) LiveData는 관찰가능한(Observable) 데이터 홀더 클래스이다. 안드로이드 클린 아키텍처로 MVVM(Model-View-ViewModel)을 지향하고 있다. MVVM 아키텍처에서 VIewModel과 View의 데이터 이벤트 처리방식으로 LiveData를 많이 이용한다. 관찰가능한 다른 클래스와 다르게 LiveData는 액티비티, 프레그먼트, 서비스 등의 라이프사이클을 인지하여 활성화 상태(여기서 활성화만 START 또는 RESUME 상태이다) 인 경우에만 데이터를 업데이트 한다. 이전에 LiveData가 아닌 직접 구현하여 사용하였던 방식을 편하게 사용할 수 있게 되었다. LiveData의 observe() 함수형은 아래와 같다. 첫 인자로 Lifecyc..
[Android] 하단 탭 사용하기 (BottomNavigation)
BottomNaviagtionView는 NavigationBarView를 확장하는 클래스이다. BottomNaviagtionView는 어플리케이션에서 표준 하단 탐색바를 나타내고 머티리얼 디자인 하단 탐색바의 구현이다. 하단 탐색바를 사용하면 사용자가 탭 한 번으로 상위 수준의 뷰를 쉽게 탐색하고 전환할 수 있다. 이러한 사용자 인터페이스는 애플리케이션에 3~5 개의 최상위 뷰가 존재하는 경우 사용하는 것을 추천한다. 레이아웃 구성하기. 하나의 액티비티를 생성하자. 생성한 액티비티의 레이아웃 구성은 아래와 같다. FrameLyout을 선언하고 내부에 BottomNaviagtionView를 생성한다. BottomNaviagtionView 내에 app:menu="@menu/menu" 를 확인할 수 있다. 여..
[Android] WearOS HealthServicesClient 성능 문제 분석기
리눅스 기반의 프로세스 성능 분석의 경험은 있으나 안드로이드 어플리케이션의 성능 분석은 처음이다. 학생 이후에 약 10년 만에 안드로이드 개발을 해보는 상황으로 도메인 지식이 많이 부족하다. 안드로이드 플랫폼에서 어떤 프로파일링 툴을 제공하고 어떻게 사용해야 하는지 파악을 해보고 싶었고, 문제를 좀 더 빠르게 분석하고자 했다. 현재 안드로이드 웨어OS 기반의 헬스 어플리케이션을 개발하고 있다. 디바이스 타겟은 갤럭시 워치 4이며 헬스 기능은 안드로이드에서 제공하는 헬스 API를 사용한다 .(Samsung Health는 파트너 체결 등의 이유로 사용하지 않았다.) 처음 서비스 로드가 너무 느려! 문제는 디바이스 부팅 후 첫 헬스 서비스 사용 시 시스템에서 헬스서비스의 로드가 매우 느리다는 문제가 있었다. ..
[Android] Google Map Key 관리
안드로이드에 구글 맵 플랫폼(https://developers.google.com/maps?hl=ko)을 사용하여 지도 기능을 개발하는 경우에는 구글 맵 플랫폼에서 제공하는 키를 관리해야 한다. 해당 키는 민감한 정보로 github과 같은 버전관리시스템에 노출이 되어서는 안된다. 앞서 민감한 키 정보를 local.properties 에 작성하여 버전관리시스템에서는 관리되지 않도록 하고, BuildConfig를 이용하여 키 값을 코드에서 사용하는 방법을 소개한 적이 있다. (2022.08.08 - [IT Domain Knowledge/Android] - [Android] local.properties를 사용하여 키 관리하기 ) 구글 맵에서 제공하는 키는 AndroidManifest.xml 파일에 명시를 해..