목록전체 글 (152)
시배's Android

Layout Compose의 Layout은 레이아웃을 커스터마이징 하는 데 사용됩니다. Layout은 자체적인 측정 및 배치 로직을 가지며, 하위 요소들을 포함하여 화면에 표시할 위치와 크기를 결정합니다. 먼저, Layout 클래스를 상속하여 사용자 정의 레이아웃을 작성해보겠습니다. 다음은 커스텀 레이아웃을 구현하기 위한 기본적인 코드입니다. import androidx.compose.foundation.layout.Layout import androidx.compose.runtime.Composable import androidx.compose.ui.LayoutModifier import androidx.compose.ui.Modifier import androidx.compose.ui.geometry..

Kotlin Coroutine과 스레드 활성화 Kotlin의 강력한 비동기 프로그래밍 도구인 Coroutine은 스레드를 효율적으로 관리하여 비동기 작업을 수행할 수 있도록 돕습니다. 이번 포스트에서는 10,000개의 Coroutine을 실행했을 때 활성화된 스레드 수를 알아보도록 하겠습니다. import kotlinx.coroutines.* import kotlin.system.measureTimeMillis suspend fun createCoroutines(amount: Int) { val jobs = ArrayList() for (i in 1..amount) { jobs += GlobalScope.launch { delay(1000) } } jobs.forEach { it.join() } } fu..

CollapsingToolbarLayout CollapsingToolbarLayout은 스크롤 동작에 따라 다양한 효과를 적용할 수 있습니다. 예를 들어 스크롤을 아래로 내릴 때 툴바가 축소되면 화면 상단에 고정되고 이미지가 페이드아웃되는 효과 등을 설정할 수 있습니다. 위 Gif처럼 Compose에서 구현을 하려면 TopAppBarDefaults에 정의되어 있는 ScrollBehavior와 LargeTopAppBar를 통해 구현할 수 있습니다. @OptIn(ExperimentalMaterial3Api::class) @Composable fun Test() { val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() Scaffol..

Recomposition Compose의 recomposition은 UI를 업데이트하기 위해 필요한 변경 작업을 식별하고 수행하는 과정을 의미합니다. Recomposition은 선언적인 방식으로 작성된 Composable 함수들이 동작하는 핵심 메커니즘 중 하나입니다. Compose에서는 UI를 구성하는 각각의 Composable 함수는 독립적인 단위로 작동합니다. Composable 함수는 입력된 상태(State)에 따라 UI를 그리고 업데이트하는 역할을 담당합니다. Composable 함수는 상태가 변경될 때마다 자동으로 호출되고, 변경된 부분만 다시 그리고 업데이트합니다. Recomposition은 Composable 함수가 동일한 입력에 대해 동일한 출력을 생성하는지 확인하기 위해 수행됩니다. C..
Repository With Suspend Functions 일시 중단 함수를 만들려면 시그니처에 suspend 제어자만 추가하면 된다. 코루틴 외부에서 이 함수를 호출하면 동작하지 않는다. interface ProfileServiceRepository { suspend fun fetchByName(name : String) : Profile suspend fun fetchById(id : Long) : Profile } class ProfileServiceClient : ProfileServiceRepository { override suspend fun fetchByName(name : String) : Profile { return Profile(1, name, 28) } override suspe..
비동기 함수 결과가 없는 비동기 함수 : 완료 여부를 모니터링할 수 있지만 결과를 갖지 않는 백그라운드 작업이 이런 유형에 속한다. 결과를 반환하는 비동기 함수 : 비동기 함수가 웹 서비스에서 정보를 가져올 때 거의 대부분 해당 함수를 사용해 정보를 반환하고자 할 것이다. 잡의 라이프 사이클 New : 존재하지만 아직 실행되지 않는 잡 잡은 기본적으로 launch()나 Job()을 사용해 생성될 때 자동으로 시작된다. 잡을 생성할 때 자동으로 시작되지 않게 하려면 CoroutineStart.LAZY를 사용해야 한다. Activie : 실행 중인 잡. 일시 중단된 잡도 활성으로 간주된다. start() : 잡이 완료될 때까지 기다리지 않고 잡을 시작한다. 일시 중단 함수나 코루틴에서 호출할 필요가 없다. ..
안드로이드의 UI 스레드 안드로이드는 뷰 계층을 생성하지 않은 스레드가 관련 뷰를 업데이트하려고 할 때마다 CalledFromWrongThreadException을 발생시킨다. 자바에서의 네트워크 동작은 기본적으로 블로킹된다. NetworkOnMainThreadException 발생 백그라운드에서 요청하고, UI 스레드에서 업데이트할 것 스레드 생성 CoroutineDispatcher 기본적으로 가용성, 부하, 설정을 기반으로 스레드 간에 코루틴을 분산하는 오케스트레이터다. asyn()는 Deferred를 반환하는데, 디퍼트 코루틴 프레임워크에서 제공하는 취소 불가능한 넌블로킹 퓨처를 의미한다. asyn() 블록 안에서 발생하는 예외는 그 결과에 첨부되는데, isCancelled와 getCancellat..
프로세스 프로세스는 실행 중인 애플리케이션의 인스턴스다. 애플리케이션이 시작될 때마다 애플리케이션의 프로세스가 시작된다. 프로세스는 상태를 갖고 있다. 리소스를 여는 핸들, 프로세스 ID, 데이터, 네트워크 연결 등은 프로세스 상태의 일부이며 해당 프로세스 내부의 스레드가 액세스를 할 수 있다. 스레드 실행 스레드는 프로세스가 실행할 일련의 명령을 포함한다. 프로세스는 최소한 하나의 스레드를 포함하며 이 스레드는 애플리케이션의 진입점을 실행하기 위해 생성된다. 보통 진입점은 애플리케이션의 main() 함수이며 메인 스레드라 하는데 프로세스의 라이프 사이클과 연관된다. 각 스레드는 스레드가 속한 프로세스에 포함된 리소스를 액세스하고 수정할 수 있지만 스레드 로컬 스토리지 라는 자체 저장소도 갖고 있다. 애..