안드로이드 192

[Android] 페이징3(Paging3)에 대해 알아보자

Android 페이징3(Paging3)에 대해 알아보자 # Paging이란? 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나눠서 가져오는 것을 뜻합니다. 페이징을 사용하면 성능, 메모리, 비용 측면에서 굉장히 효율적입니다. # Jetpack Paging Library Android Jetpack에서는 페이징을 위한 Paging3 라이브러리를 제공. Paging3 라이브러리는 로컬 저장소에서나 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와줍니다. Paging3은 구글에서 권장하는 Android 앱 아키텍처에 맞게 설계되었으며, 다른 Jetpack 컴포넌트와 잘 동작할 수 있도록 설계되었습니다. # Paging3의 장점 페이징 된 데이터의 메모리 내 캐싱..

안드로이드 2022.05.13

[Android] 샘플앱을 추가했더니 빌드 에러 Duplicate class, DuplicateRelativeFileException

안드로이드 샘플앱을 추가하였더니 빌드에러가 났다. DuplicateRelativeFileException Duplicate class com.google.protobuf.AbstractMessageLite 등등.. 해당 글의 답변 ! 안녕하세요. protobuf-java 와 protobuf-lite 의 충돌로 인한 문제로 보입니다. 앱의 build.gradle에 protobuf-java를 제외하고 실행을 시켜보셨으면 합니다. android { . . configurations { implementation.exclude module: 'protobuf-java' } } # 뭔가 다른 라이브러리와 충돌되는 것 같다. 해당 protobuf-java부분을 exclude하니 나는 해결되었다. 참조 : https..

텍스트뷰에 숫자가 길게 써있을 때 버벅 거리는 경우

문제 : 해당 텍스트뷰에 숫자가 길게 입력 되어있다 본문에 autolink 옵션이 적용되어 있습니다. autolink 적용된 옵션은 "web|email|phone|map" 입니다. 본문이 숫자로 길게 입력되어, phone 관련 처리하는 부하기 걸려 느리게 동작 해결을 하려면, autolink 를 제거 하거나 옵션을 줄여보는게 방법일 수 있으나, phone 이 있는 상태에서, 위 본문과 같은 숫자가 길게 입력된 경우는 동일한 문제가 발생될 것 같습니다.

Coroutine suspend function

코루틴은 일시중단이 가능하다. launch로 실행하든 async로 실행하든 내부에 해당 코루틴을 일시 중단 해야하는 동작이 있으면 코루틴은 일시 중단 된다. # suspend 사전적 의미로는 '중지하다'라는 뜻이다. coroutine에서는 시작하고, 멈추고, 다시 시작할 수 있는 함수라고 한다. suspend란 비동기 실행을 위한 중단 지점의 의미 즉, 잠시 중단(suspend)한다는 의미이고, 잠시 중단 후에 다시 시작(resume) 된다는 뜻 # Suspend function이 없다면? 하나의 thread가 block될 경우, 해당 thread는 다른 작업을 할 수 없는 block상태에 놓이게 된다. 즉, blocked 상태가 끝날 때까지 해당 thread는 중지 상태인 것. 하지만, suspend..

CoroutineContext

# CoroutineContext Coroutine(코루틴)을 어떻게 처리할 것인지에 대한 여러가지 정보(Element)를 포함 -> Element의 집합 CoroutineContext는 Interface로, 코루틴에 대한 설정 요소(Element)를 등록하고 Scope의 속성이 된다. 말이 너무 어렵다.. -> CoroutineContext는 Coroutine이 실행되는 환경이라고 생각하면 된다. CoroutineContext 인터페이스 내부에는 4가지의 메소드가 존재 public operator fun get(key: Key): E? get() - 연산자(operator) 함수의 의미로, 매개변수로 주어진 key에 해당하는 Context 요소를 반환하는 함수 public fun fold(initial..

코루틴 Coroutine

# Coroutine Android Developer 에서의 정의 “비동기적으로 실행되는 코드를 간소화 하기 위해 Android 에서 사용할 수 있는 동시 실행 설계 패턴” 코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다. 경량: 코루틴을 실행 중인 스레드를 차단하지 않는 *정지*를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지는 많은 동시 작업을 지원하면서도 차단보다 메모리를 절약합니다. 메모리 누수 감소: *구조화된 동시 실행*을 사용하여 범위 내에서 작업을 실행합니다. 기본으로 제공되는 취소 지원: 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다. Jetpack 통합: 많은 Jetpack 라이브러리에 코루틴을..

Android 뷰페이저2

# ViewPager 동작 ViewPager는 PagerAdapter 기반으로 구성되어있는데 스크롤을 진행할 때 마다 instantiateItem()와 destroyItem() 메서드가 호출 기존 뷰페이저의 문제 뷰페이저가 버벅인다 -> 고안해낸 방법이 PagerSnapHelper를 이용해서 RecyclerView로 해결 하였다고 한다. PagerSnapHelper RecyclerView를 집어넣고 Pager의 느낌을 내기 위하여 PagerSnapHelper를 이용하여 해결 확장이 어렵고 cost가 든다. 결국 ViewPager2가 나왔다. RecyclerView의 장점을 가지고와서 만듬. ViewPager2에서 어댑터를 만들 때 RecyclerView.Adapter를 이용해서 만들어 준다. ViewPa..

비동기 처리 - 블로킹과 논블로킹

# Android Single Thread 안드로이드의 애플리케이션을 실행하면 시스템은 메인 액티비티를 메모리로 올려 프로세스를 만들며, 이 때 메인 스레드가 자동으로 생성 메인 스레드는 안드로이드의 주요 컴포넌트를 실행하는 곳이자 UI를 그리거나 갱신하는 일을 담당 하지만. 이 스레드만으로는 원하는 작업을 모두 처리할 수 없음. 왜냐면 긴 작업은 메인 스레드를 블럭할 수 있음. 따라서 안드로이드는 비 동기적으로 실행되는 코드를 작성해야만 함. 화면에 무엇인가를 표시하는 작업 말고, 내부적으로 돌아가는 작업이 필요함. # sync, async, blocking, non-blocking # Blocking(블로킹)과 Non-blocking(논블로킹) 1) 블로킹 블로킹은 A 함수가 B 함수를 호출하면, 제..