전체 글 426

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

문제 : 해당 텍스트뷰에 숫자가 길게 입력 되어있다 본문에 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 함수를 호출하면, 제..

안드로이드 스튜디오 JAVA_PATH 설정 및 APK 빌드

문제 : android studio를 통해서 APK 빌드를 하여 배포하려고 하였다. 1. 클린하고 # ./gradlew clean 2. 디버그 버전으로 apk 빌드 # ./gradlew assembleRealLogOnStagingDebug 에러나는 경우 java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x42eadbce) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com..

개발설정 2022.04.06