About Service
- 안드로이드 어플래케이션을 구성하는 4개의 컴포넌트 중 하나
- 화면이 없는 액티비티
- 백그라운드에서 작업할 때 구현
서비스 종류
1. Started Service
- 액티비티와 상관없이 독립적으로 동작할때 사용
- 일반적으로 사용하는 서비스
- 사용법
startService(Intent(this, AppService::class.java))
2. Bound Service(bindService())
- 액티비티와 값을 주고 받을 필요가 있을 때 사용
- 여러개의 액티비티가 같은 서비스 사용 가능 -> 서비스를 바인딩 해서 재사용 가능
- 인터페이스가 복작하고 액티비가 종료 되면 같이 종료됨 -> 잘 사용하지 않음
- 사용법
bindService(Intent(this, AppService::class.java))
3. Foreground Service
- 기본적으로 서비스는 모두 백그라운드 서비스
- 사용자에게 알림을 통해 현재 작업이 진행중임을 알려주어야함 -> notification 구현 필수
- 서비스 생성 -> 시스템에 foreground 로 사용됨을 알려주어야 함
- 사용법
startForegroundService(Intent(this, AppService::class.java))
Service Lifecycle
1. onStartCommand()
- startService() 함수가 호출되면 호출되는 함수
- 독립적인 서비스가 필요할 때 구현해야함
- startService()로 서비스를 호출 시 stopSelf()메소드나 stopService() 함수가 호출될 때 까지 서비스가 살아있음
2.onBind()
- bindService() 함수를 호출할 때 호출 되는 함수
- Bound Service 를 사용하기 싶다면 반드시 구현 해야함
3. onCreate()
4. onDestory()
- 서비스가 종료될 때 호출 되는 함수
- 리스너 제거, 리시버 제거, 리소스 정리 해주는 코드 작성

Service 구현
1. Service 를 상속 받는 클래스 생성
2. Callback 구현
- onStartCommand()
- onBind()
- onCreate()
- onDestroy()
3. Menifest 에 선언
<manifest ... >
...
<application ... >
<service android:name=".클래스 이름" />
...
</application>
</manifest>
4. Foreground Service 구현 시 notification 코드 작성