본문 바로가기

안드로이드41

[Android] 안드로이드 메모리 누수에 관하여 최근 운영하고 있는 서비스는 Firebase Crashlytics를 사용해서 앱의 로그를 수집하고 있습니다.99.99%정도는 크래쉬가 발생하지 않지만 일부 크래쉬가 리포트되고 있는데, 그 중 OOM이 꽤 비중을 차지하고 있습니다.이미지 또는 동영상이 보이거나 백그라운드에서 센서를 활용하는 등의 기능이 있어서인지 OOM이 크래쉬의 주된 원인이 되고 있는데요.이러한 OOM의 원인은 메모리에 비해 큰 이미지, 동영상과 같은 것을 로드할때도 발생하지만 메모리 누수에 의해 발생하기도 합니다. 메모리 누수메모리 누수는 필요하지 않은 메모리를 계속 차지하고 있는 것을 말합니다.사용하지 않는 메모리가 계속 공간을 차지하기 때문에 필요한 메모리들이 할당될 공간이 점점 적어지고 결과적으로 메모리가 부족한 상황에 이르게 됩.. 2025. 2. 4.
[Android] Jetpack Compose - Layout으로 커스텀 레이아웃 만들기 프로젝트 진행 중에 커스텀 레이아웃이 필요했습니다.스크롤이 가능한 Column에서 staggered layout이 필요했는데, LazyVerticalStaggeredGrid을 사용하기엔 중첩 스크롤 문제가 발생했기 때문입니다.그래서 이러한 상황에서 사용 가능한 staggered layout을 구현하기로 했습니다.이를 위해 커스텀 레이아웃을 구현하기 위해 기본적으로 이해가 필요한 부분이 있었기 때문에 이에 대해 포스팅합니다. LayoutCompose에서 기본적으로 제공하고 있는 Scaffold, Surface, Column, Row 등은 Layout를 기본적으로 사용하여 구현되어 있습니다.다음은 하나의 예로, Column 컴포저블 함수의 코드입니다.@Composableinline fun Column( .. 2025. 2. 2.
Kotlin Coroutines, 에러 처리와 SupervisorJob 오늘날 Kotlin 기반의 안드로이드 앱을 개발하고 있다면 Coroutines를 사용하고 있을 것입니다.그렇다면 십중팔구 Jetpack ViewModel에서 제공하는 ViewModelScope를 사용하고 있을텐데요.ViewModelScope를 생성하는 코드를 보면 SupervisorJob이 등장합니다.package androidx.lifecycle.viewmodel.internalinternal fun createViewModelScope(): CloseableCoroutineScope { val dispatcher = try { Dispatchers.Main.immediate } catch (_: NotImplementedError) { EmptyCoroutineCo.. 2025. 1. 29.
Kotlin Coroutines, 구조화된 동시성 (Structed Concurrency) 오늘날, 안드로이드 개발은 Kotlin이 메인 프로그래밍 언어로 자리잡고 있습니다.이로 인해 비동기 작업은 Kotlin Coroutines(코루틴)이 완전히 자리를 잡고 있는데요.일부 역사가 긴 서비스를 보유한 회사에서는 Rx 계열을 사용하는 경우도 있지만, 아마 코루틴으로 마이그레이션하는 작업을 진행하지 않을까 예상됩니다.코루틴은 구조화된 동시성이라는 원칙을 따르고 있습니다.https://kotlinlang.org/docs/coroutines-basics.html#structured-concurrency Coroutines basics | Kotlin kotlinlang.org구조화된 동시성은 동시성 작업간에 부모-자식과 같은 관계를 형성하여 가독성, 유지보수성, 안정성이 뛰어난 동시성 코드를 작성할 .. 2025. 1. 27.
반응형