
221
11
장
-
서비스
안드로이드는 다른 응용프로그램에 노출되어야 하거나 사용자에게 보이지 않는 작업을 실행하
기 위해 서비스 구성요소를 제공한다. 서비스만으로는 비동기 실행 환경이 아니지만, 이 장은 서
비스를 통한 비동기 실행에 초점을 맞춘다. 비록
UI
와 직접 상호작용하지는 않지만, 서비스는
UI
스레드에서 실행된다. 따라서 반응성을 떨어뜨리거나
ANR
을 일으킬 수 있다. 그러나 비동
기 실행자와 결합한 서비스는 백그라운드 태스크 실행을 위한 가장 강력한 도구다.
11.1
비동기 실행을 위해 서비스를 사용해야 하는 이유
백그라운드 동작을 위해 서비스 대신 일반적인 스레드를 이용하면 두 가지 위험이 있다.
| 구성요소 생명주기와 스레드 생명주기의 분리 |
스레드 생명주기는 안드로이드 구성요소 그리고 안드로이드 하부의 자바 객체 생명주기와 독립
적이다. 스레드는 태스크가 끝나거나 프로세스가 죽을 때까지, 심지어 스레드를 시작한 구성요
소가 끝난 후에도 실행을 계속한다.
6
장에서 설명한 대로, 스레드가 종료할 때까지 자바 객체가
가비지 컬렉션되지 않도록 스레드는 자바 객체의 참조를 유지할 수 있다.
| 호스팅 프로세스의 생명주기 |
런타임이 프로세스를 종료하면 프로세스의 모든 스레드는 종료된다. 따라서 프로세스가 복구될
서비스
CHAPTER
11