mash-up
-
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: 가장 빠른 메모리..
-
Launch ModeAndroid 2023. 3. 5. 13:03
안녕하세요 여러분! 10기 유희진입니다:) 저는 생명주기에 대해서 공부하다가 안드로이드에 Launch Mode가 있다는 걸 알게 되었어요. Launch Mode의 4가지 종류에 대해서 알아보고, 그중 singleTop과 singleTask로 선언된 액티비티들의 생명주기가 어떻게 돌아가는지도 함께 말씀드리려고 합니다. Task 일단 시작하기 전에 아래에서 등장할 Task가 뭔지 알아두셔야 해요. 다들 OS 강의 들으실 때 프로세스에 대해서 배워보셨을 것 같은데요, 계속해서 컨텍스트 스위칭이 진행되면서 여러 가지 프로그램이 ‘동시에’ 진행되는 것처럼 작동하잖아요, 그때 해당 프로그램이 현재까지 어떤 동작을 하고 있었는지에 대한 진행상황에 대한 정보를 프로세스에 저장하죠? 태스크도 a little bit 비슷..
-
Fullscreen으로 동작하는 Custom Dialog 만들기Android 2023. 3. 5. 12:49
개요 Fullscreen으로 동작하는 Dialog를 만드는 방법으로는 크게 두 가지가 있다. Dialog처럼 보이는 Activity를 만들어 띄우기 Dialog를 Customizing하여 Fullscreen으로 띄우기 둘 중 어떤 것이 베스트라고 할 수는 없지만, 기왕이면 ‘다이얼로그’라는 이름답게 2번 방식을 따라 보기로 했다. 최초 작성 코드 언어는 java였으나 kotlin으로 변경하였고, findViewById 대신 ViewBinding 을 적용하였다. 완성본 미리 보기 SHOW DIALOG 버튼 클릭 시 Fullscreen으로 동작하는 Dialog가 출력되고, SUBMIT/CANCEL 버튼 클릭 이벤트와 동시에 Toast가 출력되는 예제 앱이다. 코드 작성 MyCustomDialog 라는 이름의..
-
LiveData vs StateFlow, Why we should use the 'StateFlow'?Android 2023. 3. 5. 12:46
LiveData 는 Lifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해 주면서 앱 개발 시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리입니다. LiveData 는 옵서버 패턴을 활용하여 구현되었으며, 관찰 가능한 일반 클래스인 ObservableXXX 클래스와는 달리 LiveData 는 생명주기의 변화를 인식합니다. 즉, Activity, Fragment, Service 등 안드로이드 컴포넌트의 생명 주기 인식을 통해 Active 상태에 있는 컴포넌트에서만 업데이트합니다. LiveData 를 사용했을 때 장점은 아래와 같습니다. Activity 와 Fragment 는 LiveData 객체를 안전하게 관찰할 수 있고, 생명 주기가..