진짜 개발자
본문 바로가기

App/Android

Android - Service

728x90

서비스(Service)

- 서비스는 백그라운드에서 실행 될 수 있는 컴포넌트이다 

*- 서비스 또한 컴포넌트 이기 때문에 매니패스트에 등록을 해주어야 한다

*- 서비스는 메인 스레드를 사용하기 때문에 성능의 이유로 서비스 내에서 별도의 스레드를 만들어 실행 해주어야 한다.

- 서비스를 구현할 때 확장가능한 클래스는 Service , IntentService 가 있다 각각 여러개의 작업을 해야한다거나 하나의 작업을 처리한다는 차이가 있다 

  보통의 서비스는 한개의 요청의 처리를 처리하므로 IntentService 를 확장하여 사용하면 편하다(위험함)

<서비스 종류>

 1. started - startService()를 호출하면 시작된다

             - 한번 시작되면 백그라운드에서 무기한으로 실행된다

             - 보통은 작업이 완료되면 스스로 종료된다

      ex) 파일다운로드 , 음악재생

 2. bound(bind) - bindService()를 호출하면 시작된다 클라이언트와 서버와 같이 동작한다

                     (서비스가 서버의 역할을 수행한다 : 액티비티가 서비스에게 요청을하면 서비스가 요청 결과를 반환 해준다)

                   - 보통은 바인딩된 액티비티가 사라지면 서비스도 소멸된다

                   - bound 서비스는 여러 액티비티와 연결될수 있다.

<서비스와 스레드>

서비스 - 기본스레드 외부 에서 사용되어야 하지만

           서비스는 사용자가 어플리케이션과 상호작용을 하지 않아도 되는 경우에 사용된다

 ex) 음악 실행 , I/O , ...

스레드 - 기본스레드 외부 에서 사용되어야 하지만

          사용자와 어플리케이션이 상호작용 하는 동안에만 실행 되게 하려면 스레드를 사용해야 한다

 ex) 예를들어 액티비티가 실행되는 동안에만 음악을 실행시키고 싶다면 

     onStart() 에서 스레드를 실행하여 onStop() 에서 중지시킨다

<서비스 확장>

 1. Service - 모든서비스의 기본 클래스 이 클래스를 확장하는 경우 서비스의 모든 작업을 수행할

               새 스레드를 만들어야 한다 

               기본적으로 메인 스레드를 사용하기 때문

 2. IntentService - Service의 서브클래스로 , 서브 스레드를 사용하여 처리를 하지만 

                     한번에 하나씩 처리를 한다( 서비스가 여러개의 요청을 동시에 처리하지 않아도 될 경우사용)

                     onHandleIntent() 만을 구현하면 된다