Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- define
- 추상팩토리패턴
- builderPattern
- android designsystem
- compose
- ㅋㅁ
- 추상 팩토리
- material3
- Functional Programming
- PrototypePattern
- 옵저버 패턴
- Design Pattern
- Coroutines
- kmp
- designPattern
- 디자인패턴 #
- 디자인패턴
- kotlin multiplatform
- 코틀린멀티플랫폼
- 코틀린
- 안드로이드 디자인시스템
- 프로토타입 패턴
- Abstract Factory
- factory method
- Kotlin
- 코루틴
- 팩토리 메소드
- 함수형프로그래밍
- 빌터패턴
- Observer Pattern
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Android Service의 기본 본문
Android Service 정의
Service는 사용자 인터페이스(UI)를 제공하지 않으면서 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 Android 애플리케이션 구성 요소입니다.
- UI 없음: Activity와 달리 화면에 표시되지 않습니다.
- 백그라운드 실행: 사용자가 다른 앱으로 전환하거나 앱을 닫은 후에도 계속 실행될 수 있습니다.
- 용도: 네트워크 트랜잭션 처리, 음악 재생, 파일 I/O, 콘텐츠 제공자와의 상호 작용 등과 같이 지속적으로 또는 특정 시점까지 실행되어야 하는 작업을 처리하는 데 사용됩니다.
https://developer.android.com/develop/background-work/services?hl=ko
Service의 주요 유형
Android 서비스는 크게 세 가지 유형으로 나눌 수 있으며, 이는 Service가 실행되는 방식과 시스템에서의 우선순위를 결정합니다.
1. 포그라운드 서비스 (Foreground Service)
- 정의: 사용자에게 직접적으로 인지되는 작업을 수행하는 서비스입니다.
- 특징: 반드시 **상태 표시줄(Status Bar)에 지속적인 알림(Notification)**을 표시해야 합니다.
- 우선순위: 시스템 메모리가 부족하더라도 강제 종료될 가능성이 가장 낮습니다.
- 예시: 음악 재생 앱에서 현재 트랙 정보를 표시하는 알림과 함께 음악을 재생하는 경우.
2. 백그라운드 서비스 (Background Service) 현재 거의 사용되지 않음. WorkManager에 대체됨.
- 정의: 사용자에게 직접 보이지 않는 작업을 수행하는 서비스입니다.
- 특징: 사용자에게 알림을 표시할 필요는 없습니다.
- 우선순위: 시스템이 리소스를 회수해야 할 경우 가장 먼저 강제 종료될 수 있습니다. (Android 버전이 올라가면서 백그라운드 실행에 제약이 많아졌습니다.)
- 예시: 주기적인 데이터 압축이나 로그 기록 등의 작업.
참고: 앱이 API 수준 26 이상을 타겟팅하는 경우 앱 자체가 포그라운드에 있지 않을 때 시스템은 백그라운드 서비스 실행에 제한을 적용합니다. 예를 들어 대부분의 경우 백그라운드에서 위치 정보에 액세스해서는 안 됩니다. 대신 WorkManager를 사용하여 작업을 예약하세요.
3. 바인드 서비스 (Bound Service)
- 정의: 애플리케이션의 다른 구성 요소(예: Activity)가 bindService()를 호출하여 바인딩할 수 있도록 하는 서비스입니다.
- 특징: 클라이언트-서버 인터페이스를 제공하여 구성 요소들이 서비스와 상호 작용하고 요청을 보내고 응답을 받을 수 있습니다.
- 수명: 서비스에 바인딩된 구성 요소가 모두 바인딩을 해제하면 서비스가 소멸됩니다.
- 예시: Activity가 Service에 연결하여 실시간으로 데이터를 요청하고 받는 경우(IPC: 프로세스 간 통신에 사용 가능).
중요 참고 사항: 스레드와의 관계
Service는 기본적으로 **앱의 메인 스레드(Main Thread)**에서 실행됩니다. 따라서 Service 내에서 네트워크 통신이나 복잡한 계산과 같은 오래 걸리는(intensive) 작업을 수행할 경우 메인 스레드를 차단하여 앱의 ANR (Application Not Responding) 오류를 유발할 수 있습니다.
따라서 Service 내에서 장시간 작업을 수행하려면, Service 내부에서 새로운 스레드를 생성하거나 Kotlin 코루틴 등을 사용하여 작업을 백그라운드 스레드로 분리하는 것이 중요합니다.