본문 바로가기

안드로이드67

[Android] JobScheduler, WorkManager https://medium.com/huawei-developers/jobscheduler-in-android-3b269e3a4e49 JobScheduler in AndroidJobScheduler is a system service that allows you to schedule tasks or jobs to be executed in the background.medium.comJobScheduler백그라운드에서 실행될 작업을 예약할 수 있는 시스템 서비스유사한 작업을 그룹화하고 함께 실행하여 시스템 리소스와 배터리 수명을 관리하도록 설계되었다.즉각적인 사용자 상호작용이 필요하지 않고 더 적절한 시간으로 연기할 수 있는 작업을 수행하는 데 유용하다.주요 구성 요소JobScheduler : 작업을 예약.. 2025. 4. 29.
[Android] Service https://developer.android.com/develop/background-work/services?hl=ko 서비스 개요 | Background work | Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Service는 백그라운드에서 장기 실행 작업developer.android.comService사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다.앱 구성요소와 서비스.. 2025. 4. 27.
[Compose] Jetpack Compose에서의 상태 관리 Compose 에서는 UI element 의 상태, UI 에 표시될 상태 등 다양한 상태를 관리하면서 사용자에게 화면을 출력한다.간단한 상태 호이스팅은 컴포저블 함수에서 관리할 수 있다.그러나 루트 컴포저블에 가까워질수록 추적할 상태가 많아지거나 컴포저블 함수에서 실행할 비교적 복잡한 로직이 있는 경우, 로직과 상태에 대한 책임을 다른 클래스에 위임하는 것이 좋다.특히 Composable UI element 의 상태를 관리하는 다른 클래스, 상태 홀더(State Holder)에 위임하는 것을 권장한다.Compose 화면의 상태 관리와 관련된 주요 항목컴포저블(Composable) : 간단한 UI element state 를 관리상태 홀더(State Holder) : 복잡한 UI element state .. 2025. 2. 22.
[Compose] Jetpack Compose 및 State 기존의 명령형 UI 구성 방식Compose 이전의 기본 Android 뷰 계층 구조는 UI 위젯의 트리로 표시할 수 있었다.레이아웃을 맨 아래에 깔고 그 위에 브랜치처럼 텍스트뷰, 이미지뷰를 넣고 다시 레이아웃을 넣는 등 쌓아가는 개념으로 뷰를 그렸다.이와 같은 작업 방식은 개발자로 하여금 XML 이라는 막대한 리소스를 반복적으로 낭비하게 하며, 노드를 변경하기 위해 findViewById, viewBinding, dataBinding 을 통하여 노드에 접근하고 setText(), setImageBitmap( ) 등의 메서드를 사용하여 변경해야 한다.이런 접근 방식은 불필요한 코드를 만들 뿐만 아니라 한 노드에 대한 업데이트의 충돌이 발생할 확률을 높이게 된다.Java/Kotlin 코드와 높은 의존성을 .. 2025. 1. 30.
[Android] MVI MVI모델, 뷰, 인텐트의 3가지 컴포넌트를 사용하는 아키텍처 패턴양방향 데이터 흐름이 가능한 MVVM 과 달리, 단방향 데이터 흐름 형태로 데이터가 이동한다.MVVM 패턴은 충분히 이상적인 패턴이지만, 화면에 대한 요구사항이 커지고 상태가 늘어남에 따라 복잡한 데이터 흐름, 상태 충돌, 스레드 안전성이란 문제에 대해 한계가 존재한다.MVVM 패턴은 데이터 바인딩으로 뷰가 데이터를 구독할 수 있지만 뷰 안에서 스스로 바인딩하는 경우가 있고, 뷰와 뷰모델 간의 핑퐁으로 로직을 처리하면 복잡한 데이터 흐름으로 파악하기 힘들 때도 있다.즉, 뷰와 뷰모델의 양방향 참조가 가능해 생기는 문제가 있다.데이터 흐름을 제어하지 못하는 게 문제였기 때문에, MVI 는 단일 상태 관리, 단방향 데이터 흐름을 통해 MVVM.. 2025. 1. 26.
[Android] Clean Architecture 소프트웨어 개발은 복잡한 문제를 해결하기 위해 코드를 작성하는 것 이상을 필요하다. 단순히 결과론으로 화면을 보여주는 것만 생각하고 개발한다면, 코드는 점차 커지며 나중에는 손볼 수 없을 정도로 난폭한(?) 코드로 변하게 된다.그렇기에 개발한다는 것은 유지보수성, 확장성, 테스트 용이성 등의 요구 사항을 충족하기 위한 고민이 필요하며, 적절한 아키텍처 설계가 필수이다. Android Clean ArchitecturePresentation(UI) Layer, Domain Layer, Data Layer 총 3가지 레이어로 구성되어 있다.각 레이어들은 *단방향 데이터 흐름으로 통신한다.단방향 데이터 흐름 : 데이터가 오로지 한 방향으로만 흐르는 것으로 *Up Stream 과 *Down Stream 방식으로 .. 2025. 1. 22.
[Kotlin] lateinit, by lazy 지연(늦은) 초기화초기화 작업을 극한으로 미루다가 사용자가 필요로 할 때 진행하는 방법클래스 안에 '이 변수를 사용할 것이다'라고 선언만 해두고 나중에 변수를 실제로 사용하는 시점에 값을 입력해주어 사용하는 것null 로 초기화할 수 없고, 객체의 정확한 값을 뒤에 가서야 알 수 있는 경우에 사용한다. lateinitvar 로 선언된 프로퍼티만 사용 가능하다.Non-null 타입만 사용 가능하다.지연 초기화를 위해 사용되는 lateinit 프로퍼티에는 null 값이 할당될 수 없다.프로퍼티에 대한 사용자 정의 getter, setter 를 사용할 수 없다.클래스 생성자에서 사용이 불가능하다.생성자에서는 프로퍼티가 즉시 초기화되어야 한다.초기화 전에는 변수 접근이 불가능하다.원시 타입은 사용이 불가능하다... 2025. 1. 14.