반응형

Mobile 79

[RxJava] flatMap, concatMap, switchMap

Observable transformation flatMap() concatMap() switchMap() Conclusion Observable transformation 현재 구독 중인 Observable 객체가 있고 이 객체의 결과 값을 변환해야 하는 경우가 종종 있다. 반드시 확장하고 더 풍부한 객체를 만들기 위함이 아니라, Observable 객체에서 반환되는 각각의 요소들을 merge 하는 과정을 거쳐 이러한 작업을 수행할 수도 있다. flatMap() flatMap() 메서드는 Original Observable 함수에서 새로운 Observable 함수를 생성한다. Original Observable에 적용된 결과를 Merge하여 내보낸다. 값을 변환하는 중 새로운 값이 앞으로 끼어들 수 있..

Mobile/RxJava 2023.07.26

[Android] Android Preferences DataStore. ( + RxJava)

목차 소개 Preferences DataStore 및 Proto DataStore Protocol Buffers DataStore 사용 규칙 설정 add a dependency Set a DataStore 일반적인 경우 Read values Write values Collect values RxJava를 사용하는 경우 Read values Set values Observe values Shared Preferences를 Preferences DataStore로 Migration 결론 소개 DataStore는 프로토콜 버퍼를 사용하여 키-값 쌍 또는 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션이다. DataStore는 Kotlin Coroutine, Flow를 사용하여 비동기적이고 일관된 트..

[Android] Example of WorkManager. (+ RxJava or Coroutine) WorkManager를 사용하는 이유.

목차 소개 WorkManager의 이점 WorkManager가 적합한 작업 Dependency 추가 AndroidManifest.xml 파일 수정 필요한 파일 생성 1. Worker Class 파일을 생성합니다. 2. Module 생성 (Only Koin) 3. Koin Initialize (Only Koin) 4. MainActivity에서 WorkManager 생성 WorkManager를 구성하는 주요 요소 Worker WorkRequest 결론 소개 WorkManager는 상황별 실행과 보장된 실행을 조합하여 적용해야 하는 백그라운드 작업을 위해 권장되는 솔루션입니다. 상황별 실행을 적용하면 WorkManager가 최대한 빨리 백그라운드 작업을 실행합니다. 보장된 실행을 적용하면 WorkManage..

[Android] Shared Preferences. 앱 내 간단한 데이터 저장에 사용.

목차 Shared Preferences Shared Preferences 객체에 접근 Shared Preferences에 쓰기 Shared Preferences에서 값을 삭제하기 Shared Preferences에서 읽기 결론 Shared Preferences 크기가 크지 않은 비교적 간단한 데이터를 key-value 형태로 저장할 수 있게 도와주는 라이브러리입니다. (Shared Preferences API와 Preference API는 다릅니다.) Shared Preferences는 애플리케이션 내부에 저장됩니다. 따라서 앱을 지우거나 데이터를 삭제하면 Shared Preferences에 저장된 값 또한 사라지게 됩니다. Shared Preferences는 해당 경로에 .xml 형태로 저장됩니다. d..

[Android] Android Studio에서 logcat이 동작하지 않는 이슈 해결.

디버깅을 위해 logcat을 확인해야 할 때, 종종 원하는 로그가 나오지 않을 때도 있습니다. 다양한 원인이 있는데 그중 몇 가지를 소개하려고 합니다. 1. 단순 USB 디버깅 오류 이 경우 단순 에러일 가능성이 높습니다. USB 연결을 다시 하면 정상적으로 로그캣이 작동될 가능성이 높습니다. 2. Invalid Cache 혹은, 캐시 데이터를 날리면 로그가 돌아오기도 합니다. 이를테면, 여러 기기를 테스트하던 중 이전 디바이스와 현재 디바이스 충돌로 인하여 무언가 에러가 발생했을 때 Invalid cache가 효과적일 수 있습니다. 3. USB 디버깅을 허용한 디바이스 로그 버퍼 사이즈 저는 3번 케이스였습니다. 아주 기본적인 라이프 사이클 관련 로그는 나오는데 제가 설정한 로그, 터치 이벤트 로직도 ..

Mobile/Issues 2023.05.15

[Android] Dive into concept of Configuration. (App Lifecycle, 화면 전환 등)

목차 Configuration 소개 Activity Recreate 상태 보존 생성 제한 결론 Configuration 소개 Configuration 클래스는 응용 프로그램 리소스에 영향을 줄 수 있는 모든 장치 구성 정보를 설명한다. 여기에는 사용자 지정 옵션(화면 스케일, 로케일, 입력 모드, 화면 방향 전환, 화면 크기와 같은 장치 구성 정보가 포함된다. val config = resources.configuration와 같이 접근할 수 있다. 일부 기기 구성은 앱이 실행되는 동안 변경될 수 있다. 여기에는 다음이 포함되지만 이에 국한되지 않는다. 앱 디스플레이 크기 화면 방향 글꼴 크기 및 두께 언어 어두운 모드와 밝은 모드 비교 키보드 사용 가능 여부 구성 변경은 대부분 사용자 상호작용으로 인해..

[Android] Dive into concept of Android Context. (Application Context and Context)

목차 Context 정의 Context Tree Activity Context, Application Context Activity Context Application Context Context 사용 Context 사용과 메모리 누수 1. static 변수에 ActivityContext 사용 2. singleton 객체에서 ActivityContext 참조 Context 정의 애플리케이션 환경에 대한 전반적인 정보를 담고 있는 인터페이스이다. 여기서 전반적인 정보란, 애플리케이션의 리소스 파일 혹은 View에 대한 정보 등을 포함한다. Context에 쓰임은 주로 activityContext, applicationContext와 같이 사용된다. Context Tree Context는 abstract c..

[Android] 안드로이드 스튜디오 리소스 에러 해결

Button XML 파일을 추가하고 빌드하였더니 갑자기 이런 에러와 마주하게 되었습니다. 단순히 리소스를 추가하고 나타난 에러라 당황스러울 수 있겠습니다. java.lang.RuntimeException: Unable to start activity ComponentInfo 에러 Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. 에러 안드로이드 스튜디오 리소스 에러인 것 같습니다. Build > Clean Build, Build > Rebuild 를 순서대로 해주고 다시 빌드하면 정상적으로 작동하는 것을 확인할 수 있습니다. Invalidate Cache까지 해주셔도 좋을 것..

Mobile/Issues 2023.04.08

[Android] Support different screen size. (큰 화면, 작은 화면 사이즈 대응)

이 글은 Compose를 사용하고 Bottom Navigation을 사용할 때 화면 사이즈에 대한 UI 구성을 부드럽게 하기 위한 간단한 예제이다. 이 예제는 Compose를 사용하였습니다. 이 글은 PC로 보는 것을 권장합니다. 1. Dependency 추가 Material3 Library Window Size Class를 사용하면 기기 화면 사이즈를 구할 수 있다. 실제 기기 사이즈와 앱 스크린 사이즈는 다를 수 있다. 출처 : https://developer.android.com/jetpack/androidx/releases/compose-material3?hl=ko 2. Code calculateWindowSizeClass()를 통해 window width size를 구할 수 있다. HomeScr..

[Flutter] Dive into Flutter State Management. UI = f(state).

IntroduceFlutter의 State앱 상태가 변경되면 사용자 인터페이스가 다시 그려진다.setState로 Widget의 state를 변경하며, 그때마다 Layer Tree를 다시 만든다.[공식 문서 기준] 언제든지 UI를 재구축하기 위해 필요한 모든 데이터 집합.widget.setText()와 같이 UI 자체를 반드시 변경할 필요 없으며, 상태를 변경하면 UI가 처음부터 다시 만들어진다.Ephemeral(Local) state Ephemeral state(UI state or local state)는 단일 위젯에 포함할 수 있는 상태이다. 예) PageView 안에 현재 페이지 예) BottomNavigationBar에서 현재 선택된 탭 이러한 상태는 위젯 트리의 다른 부분에 접근할 일이 거의 없..

Mobile/Flutter 2022.12.02