Page 829 - 3-2
P. 829

→  서비스가 실행되면 그 서비스를 실행한 컴포넌트가 종료되더라도 할 일을 모두 마칠 때까,
                         지 서비스는 종료되지 않음
                      →  서비스는 별도로 실행되기 때문에 서비스를 실행한 컴포넌트에게 실행한 것에 대한 결과
                         값을 리턴해 주지 않음
                      →  네트워크상에서 파일을 다운로드하거나 업로드 하는 경우 작업이 끝나면 서비스는 스스로,
                         종료되어야함


                    (2) bindServic() 를 이용하는 방법
                      →  앱 컴포넌트가 bindService()     를 호출하면 서비스는,          ‘bound’ 상태가 됨
                      →  바인드 된 서비스는 앱 컴포넌트들이 서비스와 상호작용 요청 및 응답 프로세스 간 통신(                  ,
                         (IPC))  할 수 있도록 해주는 클라이언트 서버 인터페이스를 제공해 줌-
                      →  서비스는 서비스가 아닌 다른 앱 컴포넌트에 의해 바인드된 경우에 bound                             상태로 동작
                      →  한 번에 여러 개의 컴포넌트가 바인드 될 수 있고 바인드된 모든 컴포넌트가 언바인드 되,
                         면 서비스 종료


                    (3)  서비스의 상태를 위와 같이 둘로 구분해서 설명하고 있기는 하지만 서비스는 Started                                상태
                        이면서 Bound     상태가 될 수 있음
                      →  Started  상태가 되는 경우 onStartCommand()        콜백 메소드가 호출
                        ►  onStartCommand()
                        ▻  다른 컴포넌트가 startService()      를 호출함으로써 서비스 실행을 요청할 때 시스템이 호,
                           출해주는 콜백 메소드
                        ▻  이 메소드가 실행되면 서비스는 started              상태가 되며, background     에서 작업을 수행함
                        ▻  만약 이 메소드를 구현한다면 서비스가 할 작업을 모두 마쳤을 때 서비스를 중지하기,
                           위해 stopSelf() 나 stopService() 를 호출하는 부분도 구현해야함
                      →  Bound  상태가 되는 경우 onBind()        콜백 메소드가 호출
                        ►  onBind()
                        ▻  다른 컴포넌트가 bindService()       를 호출함으로써 서비스를 바인드할 때 시스템이 호출해,
                           주는 콜백 메소드
                        ▻  이 메소드에서는 다른 컴포넌트가 서비스의 메소드들을 사용할 수 있도록 IBinder                                라는
                           인터페이스를 리턴해줘야함
                        ▻  다른 컴포넌트에 의해 바인드 되어 사용될 서비스라면 이 콜백 메소드를 반드시 구현해
                           야 하지만 바인드 되는 서비스가 아니라면 구현할 필요 없음


                5)  스레드(Thread)
                  가 스레드)   (Thread) 란?
                    (1)  프로세스에서 독자적인 명령어 제어권을 가지며 프로세스에 포함된 자원을 공유하는 프로그
                        램의 실행 단위를 의미
                    (2) CPU 를 효과적으로 사용하고 다수의 프로세스에 의한 오버헤드를 줄이기 위해 스레드 사용
                    (3)  스레드를 지원하지 않는 시스템은 프로세스를 CPU                   의 스케줄링 단위로 사용하지만 스레드를
                        지원하는 시스템은 스레드를 스케줄링 단위로 사용
                    (4)  대부분이 운영체제는 스레드를 지원


                  나 안드로이드와 스레드)          (Thread)
                    (1)  자바에서 제공하는 스레드를 지원
                    (2)  안드로이드 애플리케이션은 기본적으로 하나의 스레드를 가진 프로세스에 의하여 실행


                                                         - 829 -
   824   825   826   827   828   829   830   831   832   833   834