일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 연결리스트
- c
- 백준
- Rebase
- ADAS
- Android
- retrofit
- vue.js
- TensorFlow
- c++
- 인코더
- 카카오인코더
- hackerrank
- 머신러닝
- BFS
- stl
- Kotlin
- DP
- Map
- 블로그개설
- git
- python3
- 안드로이드
- 스프링
- 스프링프레임워크
- spring
- 스프링 프레임워크
- 프로그래밍
- 백트래킹
- Today
- Total
이것저것 공부한 기록
[Android] 서비스 본문
(출처 : 깡샘의 안드로이드 앱 프로그래밍 with 코틀린)
서비스는 백그라운드에서 작업을 처리할 수 있게 해주는 컴포넌트. 서비스에 화면을 구현하진 않는다.
서비스 컴포넌트는 Service 클래스를 상속받아서 작성한다. 서비스의 다양한 생명주기 함수 중 onBind()는 필수로 구현해야 한다.
class MyService : Service() {
override fun onBind(intent: Intent): IBinder? {
return null
}
}
서비스 생명주기
서비스를 실행하는 방법은 startService()와 bindService()인데, 어느 함수를 이용해 서비스를 실행하는지에 따라 생명주기가 나뉜다.
1.
startService()함수로 서비스 객체를 생성하게 되면, onCreate() -> onStartCommand()함수가 호출되고 서비스가 실행 되며, 그 상태에서 startService() 함수를 호출하면 onStartCommand()함수만 다시 호출된다.
startService()함수로 서비스를 실행하려면, 해당 서비스를 Intent에 담아서 매개변수로 전달한다. 외부 앱의 서비스라면 암시적 인텐트로 실행해야 하므로 setPackage() 함수를 이용해 앱의 패키지명을 명시한다.
val intent = Intent(this, MyService::class.java)
intent.setPackage("com.example.test_outer")
startService(intent)
stopService()함수로 서비스가 종료되면 바로 전에 onDestroy()함수가 호출된다.
val intent = Intent(this, MyService::class.java)
stopService(intent)
2.
bindService()함수에서 서비스 객체를 생성하게 되면 onCreate() -> onBind()함수가 호출되고 서비스가 실행되며, 그 상태에서 bindService()함수로 실행하면 onBind() 함수만 다시 호출된다.
bindService()함수로 서비스를 실행하려면, 먼저 ServiceConnection 인터페이스를 구현한 객체를 준비해야 한다.
val connection: ServiceConnection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) { }
//bindService()함수로 서비스를 구동할 때 자동으로 호출
override fun onServiceDisconnected(name: ComponentName?) { }
//unbindService() 함수로 서비스를 종료할 때 자동으로 호출
}
val intent = Intent(this, MyService::class.java)
bindService(intent, connection, Context.BIND_AUTO_CREATE)
//BIND_AUTO_CREATE : 서비스가 실행상태가 아니더라도 객체를 생성해서 실행
unbindService()함수로 서비스를 종료하면 onUnbind() -> onDestroy() 함수까지 실행된다.
unbindService(connection)
'Study > Kotlin&Android' 카테고리의 다른 글
[Android] Foreground Service App 만들기 (0) | 2023.05.08 |
---|---|
[Android] 어플리케이션 간 파일 공유하기 (broadcast로) (0) | 2022.11.22 |
[Android] Retrofit 서비스 인터페이스 정의 (애너테이션) (0) | 2021.12.12 |
[Android] 뷰 이벤트 처리 방법 네 가지( Listener 등록 ) (0) | 2021.11.16 |
[Kotlin] 함수형 프로그래밍, 순수 함수, 1급 시민 함수 (0) | 2021.08.05 |