티스토리 뷰

Android/Service

Service (1)

parkho79 2018. 8. 21. 08:29
300x250
300x250



Service?

사용자 인터페이스(GUI) 없이 background 에서 동작하는 component

(Android 4대 component : Activity, Service, Broadcast receiver, Contents provider)

Background 때문에 혼동할 수 있지만 사실 service 는 main thread 에서 동작한다!!



왜?

1. Activity 가 종료되어 있는 상태에서도 동작한다.

  : Activity 에서 thread 사용 시 별도의 종료가 없다면 activity 가 종료되어도 thread 는 계속 동작한다.

   하지만, activity 가 종료되면 activity 의 생명주기에 맞춰 thread 도 종료 시켜주는게 바람직하다.

   즉, 앱이 종료되어도 thread 가 동작해야 한다면 바로 service 를 이용해야 한다.

 

2. 앱이 구동 중 종료되어도 강제 종료된 service 를 다시 시작하게 할 수 있다. (옵션에 따름)

  : 1번의 연장선에서 thread 를 사용한다면 앱 구동 중 강제 종료 시 다시 시작할 수 없지만 service 는 옵션에 

   따라 시스템이 다시 시작하게 할 수 있다.

 

3. 다른 process(package) 에 있는 특정 함수를 호출하거나 callback 을 받고 싶을 때 사용할 수 있다.

  : IPC (Interprocess Communication)



종류

1. 시작타입 서비스 (started service)

  : startService() 호출, 한 번 시작되면 background 에서 무기한 실행되만, 보통 한 작업을 수행하고 서비스가

   종료된다. 호출한 곳에 결과값을 반환하지 않는다.

 

2. 연결타입 서비스 (bound service)

  : bindService() 호출, client - server 구조로 동작한다. (양방향 작업이 가능하다.)

    Activity 가 종료되면 service 도 소멸되며 하나의 service 에 여러 activity 가 연결 가능하다.



Life cycle

 

onCreate

 - 서비스가 처음 초기화 될때 실행

 - 최초 한번만 호출됨

 

  ■ 시작타입 서비스 (started service)

onStartCommand

 - 서비스가 호출될 때마다 실행

 - 동작 모드 (return 값)

START_STICKY : 시스템에 의해 종료되어도 리소스가 여유로워지면 다시 서비스 시작

START_NOT_STICKY : 시스템에 의해 종료되어도 다시 서비스 안 됨

START_REDELIVER_INTENT : START_STICKY 와 비슷하며, Intent 값까지 모두 요주시켜 줌

 

  ■ 연결타입 서비스 (bound service)

onBind

 - 바인딩을 허용하는지 확인 후, 허용한다면 서비스와 컴포넌트 사이의 통신에 필요한 IBinder 를 반환.

onUnBind

 - 서비스와 컴포넌트의 바인딩 해제

return true : 새로운 컴포넌트가 서비스에 바인드될 때 onRebind() 호출

return false : 새로운 컴포넌트가 서비스에 바인드될 때 onBind() 호출

onDestory

  - 서비스가 종료될 때 실행



실제 구현은 2편에서 다룬다.



728x90

'Android > Service' 카테고리의 다른 글

[Android O] Not allowed to start service Intent  (2) 2018.10.19
Service (4) - bindService  (0) 2018.10.16
Service (3) - bound service  (0) 2018.10.10
Service (2) - started service  (3) 2018.08.28
댓글