전체 글
-
StateFlow 값의 원시성을 보장하는 방법Android 2023. 3. 5. 13:44
안녕하세요. 메쉬업 안드로이드 11기 이두한입니다. 이번엔 Android Weekly에도 소개된 Atomic on updates with MutableStateFlow포스팅에 나와있는 StateFlow가 갖고 있는 값에 다수의 코루틴이 동시 접근하였을 경우 발생하는 문제와 해결방법에 대해 알아보도록 하겠습니다. StateFlow는 MVVM 패턴에서 UI 상태를 유지하고 내보내는데 일반적으로 사용됩니다. 예를 들어 뷰 모델 안에서 ViewState라는 데이터 클래스가 뷰의 상태를 나타내고 이이 관리하기 위해 StateFlow를 사용한다면 아래와 같이 나타낼 수 있을 겁니다. Update ui state using StateFlow class MainViewModel: ViewModel(){ private ..
-
Coroutine Shared mutable state and concurrencyKotlin 2023. 3. 5. 13:41
Shared mutable state and concurrency 안녕하세요! 안드로이드 11기 강희원입니다. 이번 포스팅에서는 코루틴 공식 가이드의 Shared mutable state and concurrency에 대해 알아보도록 하겠습니다. 목차 The problem Volatiles are of no help Thread-safe data structures Thread confinement fine-grained Thread confinement coarse-grained Mutual exclusion Actors The problem 코루틴은 Dispatchers.Default와 같은 디스패처를 이용해서 다중 스레드에서 동작할 수 있습니다. 이 과정에서 여러 동시성 문제가 발생할 수 있는데, ..
-
Coroutine Flow,Rx처럼 써보자!Android 2023. 3. 5. 13:35
Coroutine Flow, Rx처럼 써보자! 때는 바야흐로 2020년 말 안드로이드 공식 문서를 보거나 새로 추가된 paging3를 도입하던 시기에 구글에서 Coroutine을 적극적으로 지원한다는 생각이 들었습니다. 공식 문서에 비동기 관련 샘플 코드들의 첫 장이 Coroutine인 점도 그렇고 paging3를 도입할 때에 Rx보다 Coroutine으로의 구현이 상대적으로 더 쉬워보였습니다. 이러한 생각으로 진행중이던 프로젝트에 Coroutine을 도입해 보았습니다. Rx 개발자가 Coroutine Flow를 도입하면서 불편했던 점 및 이를 해결한 과정에 대해 말씀드리려 합니다. 2021년 2월 StateFlow, SharedFlow 가 코틀린에 추가 되기 전 Rx의 Subject 클래스나 Proce..
-
자주 사용되는 UI Animation 구현해보기Android 2023. 3. 5. 13:31
안드로이드에서 애니메이션을 사용하기 위해서는 디자이너분께서 주시는 gif파일을 Lottie라이브러리를 사용하였습니다. 하지만 gif파일이 없더라도, 안드로이드에서 애니메이션 효과를 구현하는 방법이 여러 가지가 있길래 공부해보고 싶어서드로이드나이츠2020 -안드로이드 UI에 Animation 들이붓기를 참고하여 실습해 봤습니다. Loading Animation : ProgressBar + Drawable를 이용한 로딩 애니메이션을 만들어보겠습니다. 먼저 로딩할 때 애니메이션을 적용하려면, drawable파일을 만들어줘야 합니다. res/drwable/loading.xml //바깥의 테두리 android:pivotX : 회전축의 X좌표 android:pivotY : 회전축의 Y좌표 (x,y)기준 ! andr..
-
HashMap vs ArrayMap, SparseArrayAndroid 2023. 3. 5. 13:25
우리는 소프트웨어를 개발할 때 데이터를 효율적으로 다루기 위해 많은 고민을 합니다. 어떤 구조로 데이터를 저장하고 조회해야 효율적 일지를 말이죠. 이는 데이터 구조(Data Structure)라고 불리는데 데이터의 형태나 CURD의 성격에 따라 다양한 방법으로 설계될 수 있습니다. 배열과 같이 메모리에서 연속적인 주소에 데이터를 나열해서 인덱스를 통해 데이터의 주소를 예측하고 바로 접근할 수 있도록 하거나, 연결 리스트와 같이 특정 데이터가 다음 데이터의 주소 값을 함께 갖고 있도록 해서 데이터 간의 연결고리를 정의하고 이를 변경해 가면서 순서를 자유롭게 변경할 수도 있습니다. Map 배열이나 리스트 같이 데이터 간의 “순서”를 부여하는 데이터 구조에서는 찾고자 하는 데이터의 인덱스를 알지 못하면 결국 ..
-
Android LMK,OOMAndroid 2023. 3. 5. 13:17
안녕하세요 유초코입니다 :) 안드로이드 LMK (low-memory killer)에 대해 알아보다가 OOM과 LMK가 어떤 관계인지 이야기를 해보려 이 주제를 가지고 왔어요 :) 먼저 안드로이드 플랫폼에서 프로세스간에 메모리를 어떻게 할당하는지 알아보며 LMK와 OOM에 대해 알아보도록 하겠습니다! 메모리 유형 먼저 안드로이드 기기에는 RAM, zRAM, Storage 세가지의 메모리 유형이 있고, CPU와 GPU는 모두 동일한 RAM에 접근합니다. 여기서 RAM(랜덤 액세스 메모리)는 시스템의 단기 데이터 스토리지로, 정보에 빠르게 액세스할 수 있도록 컴퓨터가 실시간으로 사용하는 정보를 저장하는 공간이고, 시스템에서 많은 프로그램을 실행할수록 더 많은 메모리가 필요로 합니다. RAM: 가장 빠른 메모리..
-
android 중복 클릭 방지 - ex) 좋아요 기능Android 2023. 3. 5. 13:07
좋아요 기능이란? 이 글에서 말하고자 하는 좋아요 기능은 일반적으로 하트 모양의 버튼을 클릭을 하면 좋아요 혹은 좋아요 취소 요청을 서버로 보내 UI를 업데이트하는 방식일 것입니다! 그런데 문제는 클릭 액션은 발생하기 굉장히 쉽다는 것입니다. 좋아요를 눌렀다가 다시 좋아요 취소 요청을 보내는 이러한 상황은 한 번이 아니라 여러 번 발생할 수 있습니다. 좋아요 기능은 클릭할 때마다 상태가 변경되고 그에 따른 서버 요청들의 결과들을 UI에 표시해 주어야 하는데 단순 클릭 리스너를 사용하면 정확하게 동기화시키는 것은 쉽지 않습니다. 이 문제를 어떻게 해결해야 할까요? 하나씩 알아봅시다 Class로 정의하기 class SingleClick ( private val intervalTime: Long, privat..
-
Launch ModeAndroid 2023. 3. 5. 13:03
안녕하세요 여러분! 10기 유희진입니다:) 저는 생명주기에 대해서 공부하다가 안드로이드에 Launch Mode가 있다는 걸 알게 되었어요. Launch Mode의 4가지 종류에 대해서 알아보고, 그중 singleTop과 singleTask로 선언된 액티비티들의 생명주기가 어떻게 돌아가는지도 함께 말씀드리려고 합니다. Task 일단 시작하기 전에 아래에서 등장할 Task가 뭔지 알아두셔야 해요. 다들 OS 강의 들으실 때 프로세스에 대해서 배워보셨을 것 같은데요, 계속해서 컨텍스트 스위칭이 진행되면서 여러 가지 프로그램이 ‘동시에’ 진행되는 것처럼 작동하잖아요, 그때 해당 프로그램이 현재까지 어떤 동작을 하고 있었는지에 대한 진행상황에 대한 정보를 프로세스에 저장하죠? 태스크도 a little bit 비슷..