외로운 Nova의 작업실
안드로이드 앱 프로그래밍 - 27(서비스 이해하기) 본문
- 서비스
서비스는 오래 걸리는 작업을 백그라운드에서 처리할 수 있게 해주는 컴포넌트입니다. 따라서 화면을 구현하지않고 서비스 역시 안드로이드의 컴포넌트이므로 생명주기를 시스템에서 관리합니다.
- 서비스 생성과 실행
서비스 컴포넌트는 Service 클래스를 상속받아서 작성합니다. 다양한 생명주기 함수를 재정의할 수 있지만 onBind()는 필수 입니다. 아래는 생성 예시입니다.
class Myservice: Service(){
override fun onBind(intent: Intent?): IBinder? {
return null
}
}
서비스도 컴포넌트이므로 매니페스트에 등록해야합니다. 만일 암시적 인텐트로 하려면 intent-filter 태그를 등록해줍니다.
<service android:name=".Myservice"
android:enabled="true"
android:exported="true"></service>
서비스를 실행할떄는 2가지 함수가 있는데 startService()함수와 bindService()함수가 있습니다. 둘의 차이점을 알아보겠습니다.
<startService() 함수 실행>
//서비스 실행
val intent = Intent(this, Myservice::class.java)
startService(intent)
만약 외부앱의 서비스라면 setPackage()함수를 이용해 앱의 패키지명을 명시해줍니다.
//서비스 실행
val intent = Intent("ACTION_OUTER_SERVICE")
intent.setPackage("com.example.test_outter")
startService(intent)
서비스를 종료하려면 아래와 같이 코딩합니다.
stopService(intent)
<bindService() 함수로 실행>
bindService()함수에는 serviceConnection 객체를 매개변수로 줘야합니다. 따라서 serviceConnection 객체를 미리 만들어야합니다. 아래는 객체를 만든 모습입니다.
val connection: ServiceConnection = object : ServiceConnection{
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
TODO("Not yet implemented")
}
override fun onServiceDisconnected(name: ComponentName?) {
TODO("Not yet implemented")
}
}
ServiceConnection 객체에는 추상 함수가 2개 정의되어있습니다. onServiceConnected함수는 bindService()함수로 서비스를 구동할때 자동으로 호출되며 onServiceDisconnected() 힘수는 서비스를 종료할때 자동으로 호출됩니다. 아래는 bindService()함수 서비스 실행코드입니다.
val intent = Intent(this, Myservice::class.java)
bindService(intent, connection, Context.BIND_AUTO_CREATE)
마지막 매개변수 Context.BIND_AUTO_CREATE는 플래그값으로 실행상태가 아니더라도 객체를 생성해서 실행하라는 의미입니다. 이값을 넣지않으면 서비스가 실행상태가 아니면 동작하지않습니다. 아래는 서비스 종료 코드입니다.
unbindService(connection)
- 생명주기
startService()함수로 객체를 생성하면 onCreate()함수와 onStartCommand()함수가 실행됩니다. 이후 다시 startService()함수를 호출하면 onStartCommand()함수만 실행됩니다.
bindService()함수도 마찬가지로 객체를 생성하면 onCreate()함수와 onBind()함수가 실행됩니다. 이후 bindService()함수를 호출하면 onBind()함수만 실행됩니다.
'Programming > Kotlin - Android' 카테고리의 다른 글
안드로이드 앱 프로그래밍 - 29(백그라운드 제약) (0) | 2023.02.22 |
---|---|
안드로이드 앱 프로그래밍 - 28(바인딩 서비스) (0) | 2023.02.20 |
안드로이드 앱 프로그래밍 - 26(시스템 상태 파악하기) (0) | 2023.02.15 |
안드로이드 앱 프로그래밍 - 25(브로드캐스트 리시버 이해하기) (0) | 2023.02.14 |
안드로이드 앱 프로그래밍 - 24(액티비티 ANR 문제와 코루틴) (0) | 2023.02.13 |