[Android] Service Lifecycle
Service 도 Activity와 마찬가지로 lifecycle을 가지며, lifecycle 콜백 메서드가 있습니다.
Service를 실행시킬 수 있는 방법은 2가지로, startService()
또는 bindService()
를 호출하는 방법이 있습니다.
호출되는 방법에 따라 시작된 서비스
, 그리고 바인딩된 서비스
로 구분해서 볼 수 있다.
- 단, 모든 서비스는 클라이언트와 바인딩될 수 있다. 즉,
startService()
로 실행된 서비스라도bindService()
가 호출되어 다른 클라이언트에 바인딩 될 수 있다.
onCreate()
- 서비스가 생성될 때 최초로 호출됨
- 초기 설정을 수행
onStartCommand()
startService()
로 Service가 시작될 때 호출됨.startService()
를 통해 전달한 Intent를onStartCommand()
에서 서비스가 수신하게 된다.
- 서비스는 작업이 완료되면
stopSelf()
를 호출하여 스스로 중단하거나 다른 컴포넌트가stopService()
를 호출하여 중단시킬 수 있다. (콜백 없음)onStartCommand()
호출을 한 번이라도 받은 서비스는 lifecycle을 직접 관리 및 중단해야 한다. (이후onBindCommand()
가 호출 되었더라도)- 시스템이 서비스를 중단하거나 소멸시키지 않음
onBind()
bindService()
로 클라이언트가 Service에 binding될 때 호출됨.
onUnbind()
- 모든 클라이언트들이
unbindService()
를 호출해서 binding이 해지되었을 때 호출 됨.
onRebind()
unbindService()
가 호출된 이후에, 클라이언트가bindService()
를 호출하여 Service에 binding될 때 호출됨.
5. onDestory()
- Service가 해지될 때 호출 됨.
- 리소스 해지를 수행
Service 대한 추가 설명
-
Service는 백그라운드에서 무한히 실행될 수 있는 컴포넌트로 Service를 실행시킨 컴포넌트가 종료 되었더라도 Service는 여전히 살아있을 수 있다.
-
Service는 기본적으로
main thread
에서 실행되기 때문에 user와의 인터렉션 성능을 저하시킬 수 있습니다. 따라서, Service 내에new thread
를 생성하여 작업을 수행함으로써 성능저하를 막을 수 있습니다. -
Service는 항상 명시적 인텐트만 사용하자.
android:exported=false
로 설정하여, 다른 앱에서 서비스를 호출하지 못하게 하자. (보안)Android 5.0
부터 암시적 인텐트로 bindService() 호출시, 시스템이 예외를 발생시킴.
JobIntentService
public abstract class JobIntentService extends Service
-
Service
와 차이점- 시스템에 의해 언제든지
onStopCurrentWork()
가 호출되어 중지될 수 있는 것이 차이점이다. startService()
가 아니라enqueueWork()
호출로 실행됨JobScheduler
를 사용하므로android.permission.BIND_JOB_SERVICE
permission 필요.<service android:name=“com.test.MyIntentService” android:permission=“android.permission.BIND_JOB_SERVICE" />
- 시스템에 의해 언제든지
-
IntentService
와 차이점IntentService
는 Android 8 Oreo부터 제대로 작동하지 않으며(백그라운드 실행 제한), Android 11부터 사용불가.JobIntentService
는onHandleWork()
를 통해 설정한다. (IntentService는onHandleIntent()
)
참고
- https://developer.android.com/guide/components/services
- https://developer.android.com/training/run-background-service/send-request
Leave a comment