서비스 란
보이지 않게 돌아가는 4대 애플리케이션 구성요소(액티비티, 서비스, 브로드캐스트 리시버, 컨텐츠 프로바이더) 중 하나.
서비스 유형으로는 background service, foreground service 로 나뉘고 이를 통해 immortal service 를 구현할 수 있다.
서비스 시작 방식으로는 startservice, bindservice 로 나뉜다.
서비스의 세가지 유형과 우선순위

포그라운드 서비스
이름 그대로 사용자에게 보이는 작업을 수행한다.
왜 포그라운드인가? 사운드클라우드(멜론같은 앱)을 예로 들자. 다른 앱을 실행하고 있어도 그 위에 오디오 트랙을 재생시킬 수 있다.
startService() 로 호출되고 onStartCommand 로 실행된다. (최신버전에선 startForgroundService 로 호출된다)
stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
프로세스의 우선순위(중요도)가 가장 높다. 즉 희박한 확률로 삭제된다.
얘를 활용하면 immortal service 를 구현할 수 있다.
포그라운드라서 백그라운드보다 더 높게 우선순위가 매겨지기 때문에, 안드로이드 OS 에 의해 리소스 문제로 삭제당하는 우선순위가 높지 않다.
백그라운드 서비스
이름 그대로 사용자에게 보이지 않는 작업을 수행한다.
startService() 로 호출되고 onStartCommand 로 실행된다.
stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
프로세스의 우선순위(중요도)가 낮은편이다. 즉 시스템 리소스가 부족할때 삭제될 확률이 높다.
바인드
소통을 원하는 어플리케이션 구성요소가 bindService()를 불러 서비스와 바인드해 소통하도록 한다.
bind 된 구성요소가 모두 끊어진다면 알아서 onDestroy 되어 서비스가 종료된다.
서비스 우선순위
명령어로 소멸되는게 아니라
안드로이드 시스템이 서비스를 소멸시키는 경우는 리소스가 부족해 강제로 소멸시키는 경우 뿐이다.
포그라운드 서비스 > 바인드 > 백그라운드 서비스 순서로 중요도가 높다.
포그라운드 서비스 > 소멸확률 희박
바인딩 서비스 > 소멸확률 적음
백그라운드 서비스 > 소멸확률 높음
startservice, bindservice
startService(), bindService() 혼용
bindService 와 StartService 는 별개인것 같이 서술했지만 사실 동시에 쓰여도 상관없다.
startService 로 실행된 포그라운드 서비스에 bindService 로 구성요소를 service에 bind 해서 사용하더라도 상관 없다.
단 이 경우에는 모든 구성요소가 unbind 되더라도 서비스가 소멸되지 않는다.
앞에서 말했다시피
bindService의 경우 bind 된 구성요소가 모두 끊어진다면 알아서 onDestroy 되지만
startService의 경우 stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
startService(), bindService() 차이점
백그라운드 서비스를 실행시키는 startService()는 실행될때마다 서비스를 생성한다.
하지만 바인드 서비스를 실행하거나 구성요소를 bind 하는데 사용되는 bindService() 는 항상 서비스를 생성하지는 않고 서비스가 꺼져있을 때만 실행해준다.
서비스의 선언
androidmanifest.xml 에 선언해주면 된다.
<service android:name=".ConnectionService"/>
application 내에 선언해주면 된다.
android:enable 의 경우 service 를 인스턴스화 할지 여부를 나타낸다. 기본값은 true 이다.
android:exported 의 경우 어플리케이션의 구성요소가 서비스와 상호작용할 수 있는지 여부를 나타낸다.
서비스와 쓰레드
서비스는 기본적으로 main thread 에서 구동된다.
따라서 서비스 내에서 어떤 작업을 수행하고 싶다면 새로운 thread 를 생성해 그 안에서 수행하도록 해야한다.
TODO) application 과 service, aidl 에 관한 포스팅
서비스 호출함수
bindservice
public abstract boolean bindService (Intent service,
ServiceConnection conn,
int flags)
어플리케이션 구성요소를 서비스에 연결하고 필요하다면 서비스를 만든다.
content 뒤에 메소드로 붙여 선언하는데, 이 content 의 생명주기에 따라 binding의 주기도 종속됨다.
activity content 로 할 경우 activity의 생명주기에 종속되기에 binding 을 끊기 싫다면 application content 로 설정해야 한다.
service : connect 할 service 를 설정한다
conn : service 가 시작될지, 종료될지, 재시작할지에 대한 정보를 얻는다
flags : binding option 이 정해진다
BIND_AUTO_CREATE : binding이 존재할 경우 service 를 자동으로 생성해준다.
BIND_DEBUG_UNBIND : debugging 에 사용되는 flag
aidl 로 통신할 경우
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("SocketManager", "onServiceConnected()");
binder = IConnectionService.Stub.asInterface(service);
// we use instance, need to set instance's binder
instance.setBinder(binder);
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("SocketManager", "onServiceDisconnected()");
}
};
private IConnectionService binder = null;
ServiceConnection은 서비스가 생성될때 서비스 개체를 수신하고 죽거나 재시작 여부를 알려준다.
onBind() 로부터 IBinder 를 ServiceConnection을 통해 수신받는데,
aidl 로 통신할 경우 이 IBinder 를 stub.asinterface 로 IBinder 인스턴스를 IBinder 인터페이스로 변환한다.
onServiceConnected()는 연결이 수립되었을 때 service 와 통신할 수 있는 IBinder 를 반환한다.
name : 연결된 service 이름
IBinder : 연결된 service 통신 채널
startservice
public abstract ComponentName startService (Intent service)
onStartCommand 를 실행해 service 를 실행한다.
이 service 는 stopservice 전까지 실행된다.
시작할 service 를 intent 로 인식한다.
서비스의 콜백 함수
onStartCommand
서비스를 시작하도록 요청하는 메소드이다.
이 메서드가 실행된다면 서비스가 실행되고 백그라운드에서 서비스가 무한히 실행될 수 있다.
서비스를 시작하려는 곳에서 startService() 로 호출된다.
이 메소드가 실행된다면 stopSelf() 혹은 stopService()가 호출되기 전까지 무한히 실행된다.
바인딩만 제공하고 싶다면 구현하지 않아도 상관 없다.
onBind
다른 구성요소와 서비스에 바인딩되려는 경우에 호출한다.
서비스가 죽어있다면 바인드 서비스를 실행하도록 요청하는 메소드라고 볼 수 있다.
바인딩을 실행하려는 곳(예를 들면 Activity)에서 bindService()를 써서 호출된다.
구성요소와 서비스가 소통을 할때 사용되는 IBinder 를 반환한다. 바인딩을 허용하지 않을 때는 null을 반환한다.
onCreate
onStartCommand() 또는 onBind()를 호출하기 전에 호출한다.
일회성으로 실행되며, 서비스가 이미 실행 중이면 onCreate()는 호출되지 않는다.
onDestroy
서비스를 소멸시킬 때 호출한다.
각종 리소스를 정리하기 위해 구현해야 한다.
서비스의 재시작
재시작을 위해선 onStartCommand 의 return 값에 의해서 정의된다.
START_STICKY
시스템이 서비스를 중단하면 다시 재시작한다.
START_NOT_STICKY
시스템이 서비스를 중단하면 재시작하지 않는다.
조금 어려운 Service 설명
Service
백그라운드 작업을 위한 애플리케이션 구성요소, activity 는 사용자에게 보이는 화면이고, service 는 뒤에서 수행한다.
예를 들어 음악실행, 파일입출력, 네트워크 트랜젝션, 전화앱 키지 않아도 전화를 받을 수 있는 것이 service가 수행하는 기능이다.
서비스의 종류로는 백그라운드, 바인더, 포그라운드가 있는데 각각 역할은 다음과 같다.
- 백그라운드 : 사용자에게 보이지 않는 작업 수행
- 바인더 : 바인딩을 위한 서비스. activity 를 service 에 바인딩해 서비스와 상호작용 가능. bindService() 로 호출해 사용. 바인딩 해제시 해당 서비스 소멸
- 포그라운드 : 사용자에게 직접 보이는 작업 수행. 에를 들면 음악 트랙 재생시 포그라운드 사용. activity 가 아니라 서비스인 이유는 사용자가 다른 앱을 사용중이어도 실행되도록 하기 때문이다.
서비스 호출 메소드는 다음과 같다.
- startService() : activity 에서 startservice() 써서 서비스 호출시 onStartCommand() 가 호출되고 중단 전까진 실행중인 상태. stopSelf()로 스스로 중단하거나 다른 프로세스에서 stopService()로 중단.
- bindService() : 한 activity 에서 이를 호출 시 해당 서비스는 해당 요소가 바인딩된 경우에만 실행. 서비스의 모든 바인딩이 해제되면 시스템에 의해 소멸
서비스 생성 메소드는 다음과 같다.
- onCreate()
서비스 시작 메소드는 다음과 같다.
- onStartCommand() : 서비스 시작 요청. 서비스를 실행하는 곳에서 startService() 로 호출. 바인딩만 제공시 안써도 됨.
- onBind() : 요소와 서비스 바인딩 요청. 바인딩 실행하는 곳에서 bindService()로 호출. return 으로 IBinder 반환.
서비스 재시작 메소드는 다음과 같다.
- onStartCommand() 의 반환값에 의해 결정.
- START_REDELIVER_INTENT : 서비스 중단 후 서비스 재생성. 마지막 인텐트로 onStartCommand 호출
- START_STICKY : 서비스 중단 후 서비스 재생성. null 인텐트로 onStartCommand 호출.
- START_NOT_STICKY : 시스템 서비스 중단 시 서비스를 재생성하지 않음. 다시시작하는 경우 적합.
startService 와 bindService 의 차이점
Android에서 서비스를 시작하는 방법에는 startService()를 사용하는 방법과 bindService()를 사용하여 서비스에 바인딩하는 두 가지 방법이 있습니다. 이 두 가지 방법의 주요 차이점은 다음과 같습니다.
- 수명 주기: 서비스가 startService()를 사용하여 시작되면 stopService() 또는 stopSelf() 메서드를 사용하여 중지될 때까지 백그라운드에서 계속 실행됩니다. 반면 서비스가 bindService()를 사용하여 바인딩되면 클라이언트가 바인딩되어 있는 동안에만 서비스가 활성화됩니다. 모든 클라이언트가 서비스에서 바인딩 해제되면 시스템은 서비스의 onUnbind() 메서드를 호출하고 서비스는 startService()를 사용하여 시작되지 않는 한 파괴됩니다.
- 통신: startService()는 클라이언트와 서비스 간의 단방향 통신입니다. 클라이언트는 서비스를 시작하고 서비스는 독립적으로 실행됩니다. 클라이언트는 인텐트 엑스트라를 사용하여 서비스에 데이터를 전달할 수 있지만 클라이언트와 서비스 간에는 직접적인 통신이 없습니다. 반면에 bindService()는 클라이언트와 서비스 간의 양방향 통신을 허용합니다. 클라이언트는 ServiceConnection 개체를 사용하여 서비스에 메시지를 보낼 수 있고 서비스는 Binder 개체를 사용하여 클라이언트에 다시 메시지를 보낼 수 있습니다.
- 반환 값: startService()는 어떤 값도 반환하지 않습니다. 클라이언트는 서비스를 시작하고 서비스는 독립적으로 실행됩니다. 반면에 bindService()는 바인딩이 성공했는지 여부를 나타내는 부울 값을 반환합니다.
- 접속 개수: startService()는 여러 클라이언트에서 동시에 사용할 수 있으며 서비스는 모든 클라이언트가 중지할 때까지 백그라운드에서 계속 실행됩니다. 반면에 bindService()는 한 번에 하나의 클라이언트에서만 사용할 수 있습니다. 이미 다른 클라이언트에 바인딩된 상태에서 다른 클라이언트가 서비스에 바인딩을 시도하면 시스템에서 RuntimeException이 발생합니다.
요약하면 startService()는 백그라운드에서 장기 실행 작업을 수행하려는 경우에 유용하고 bindService()는 클라이언트와 서비스 간에 직접 통신 채널을 설정하려는 경우에 유용합니다.
'개발 > Android Studio' 카테고리의 다른 글
[Android Studio] IPC, RPC 차이점 (0) | 2023.03.13 |
---|---|
[Android Studio] parcel, marshalling 이란 (0) | 2023.03.06 |
[Android Studio] Activity란, Activity생명주기 (0) | 2023.03.03 |
[Android Studio] largeheap true 란 memory 관리법 (0) | 2023.02.24 |
[Android studio] 어플리케이션 간 100MB 이상 데이터 옮기는 법 (0) | 2023.02.23 |
서비스 란
보이지 않게 돌아가는 4대 애플리케이션 구성요소(액티비티, 서비스, 브로드캐스트 리시버, 컨텐츠 프로바이더) 중 하나.
서비스 유형으로는 background service, foreground service 로 나뉘고 이를 통해 immortal service 를 구현할 수 있다.
서비스 시작 방식으로는 startservice, bindservice 로 나뉜다.
서비스의 세가지 유형과 우선순위

포그라운드 서비스
이름 그대로 사용자에게 보이는 작업을 수행한다.
왜 포그라운드인가? 사운드클라우드(멜론같은 앱)을 예로 들자. 다른 앱을 실행하고 있어도 그 위에 오디오 트랙을 재생시킬 수 있다.
startService() 로 호출되고 onStartCommand 로 실행된다. (최신버전에선 startForgroundService 로 호출된다)
stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
프로세스의 우선순위(중요도)가 가장 높다. 즉 희박한 확률로 삭제된다.
얘를 활용하면 immortal service 를 구현할 수 있다.
포그라운드라서 백그라운드보다 더 높게 우선순위가 매겨지기 때문에, 안드로이드 OS 에 의해 리소스 문제로 삭제당하는 우선순위가 높지 않다.
백그라운드 서비스
이름 그대로 사용자에게 보이지 않는 작업을 수행한다.
startService() 로 호출되고 onStartCommand 로 실행된다.
stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
프로세스의 우선순위(중요도)가 낮은편이다. 즉 시스템 리소스가 부족할때 삭제될 확률이 높다.
바인드
소통을 원하는 어플리케이션 구성요소가 bindService()를 불러 서비스와 바인드해 소통하도록 한다.
bind 된 구성요소가 모두 끊어진다면 알아서 onDestroy 되어 서비스가 종료된다.
서비스 우선순위
명령어로 소멸되는게 아니라
안드로이드 시스템이 서비스를 소멸시키는 경우는 리소스가 부족해 강제로 소멸시키는 경우 뿐이다.
포그라운드 서비스 > 바인드 > 백그라운드 서비스 순서로 중요도가 높다.
포그라운드 서비스 > 소멸확률 희박
바인딩 서비스 > 소멸확률 적음
백그라운드 서비스 > 소멸확률 높음
startservice, bindservice
startService(), bindService() 혼용
bindService 와 StartService 는 별개인것 같이 서술했지만 사실 동시에 쓰여도 상관없다.
startService 로 실행된 포그라운드 서비스에 bindService 로 구성요소를 service에 bind 해서 사용하더라도 상관 없다.
단 이 경우에는 모든 구성요소가 unbind 되더라도 서비스가 소멸되지 않는다.
앞에서 말했다시피
bindService의 경우 bind 된 구성요소가 모두 끊어진다면 알아서 onDestroy 되지만
startService의 경우 stopself, stopService 가 호출되지 않는 이상 계속 실행된다.
startService(), bindService() 차이점
백그라운드 서비스를 실행시키는 startService()는 실행될때마다 서비스를 생성한다.
하지만 바인드 서비스를 실행하거나 구성요소를 bind 하는데 사용되는 bindService() 는 항상 서비스를 생성하지는 않고 서비스가 꺼져있을 때만 실행해준다.
서비스의 선언
androidmanifest.xml 에 선언해주면 된다.
<service android:name=".ConnectionService"/>
application 내에 선언해주면 된다.
android:enable 의 경우 service 를 인스턴스화 할지 여부를 나타낸다. 기본값은 true 이다.
android:exported 의 경우 어플리케이션의 구성요소가 서비스와 상호작용할 수 있는지 여부를 나타낸다.
서비스와 쓰레드
서비스는 기본적으로 main thread 에서 구동된다.
따라서 서비스 내에서 어떤 작업을 수행하고 싶다면 새로운 thread 를 생성해 그 안에서 수행하도록 해야한다.
TODO) application 과 service, aidl 에 관한 포스팅
서비스 호출함수
bindservice
public abstract boolean bindService (Intent service,
ServiceConnection conn,
int flags)
어플리케이션 구성요소를 서비스에 연결하고 필요하다면 서비스를 만든다.
content 뒤에 메소드로 붙여 선언하는데, 이 content 의 생명주기에 따라 binding의 주기도 종속됨다.
activity content 로 할 경우 activity의 생명주기에 종속되기에 binding 을 끊기 싫다면 application content 로 설정해야 한다.
service : connect 할 service 를 설정한다
conn : service 가 시작될지, 종료될지, 재시작할지에 대한 정보를 얻는다
flags : binding option 이 정해진다
BIND_AUTO_CREATE : binding이 존재할 경우 service 를 자동으로 생성해준다.
BIND_DEBUG_UNBIND : debugging 에 사용되는 flag
aidl 로 통신할 경우
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("SocketManager", "onServiceConnected()");
binder = IConnectionService.Stub.asInterface(service);
// we use instance, need to set instance's binder
instance.setBinder(binder);
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("SocketManager", "onServiceDisconnected()");
}
};
private IConnectionService binder = null;
ServiceConnection은 서비스가 생성될때 서비스 개체를 수신하고 죽거나 재시작 여부를 알려준다.
onBind() 로부터 IBinder 를 ServiceConnection을 통해 수신받는데,
aidl 로 통신할 경우 이 IBinder 를 stub.asinterface 로 IBinder 인스턴스를 IBinder 인터페이스로 변환한다.
onServiceConnected()는 연결이 수립되었을 때 service 와 통신할 수 있는 IBinder 를 반환한다.
name : 연결된 service 이름
IBinder : 연결된 service 통신 채널
startservice
public abstract ComponentName startService (Intent service)
onStartCommand 를 실행해 service 를 실행한다.
이 service 는 stopservice 전까지 실행된다.
시작할 service 를 intent 로 인식한다.
서비스의 콜백 함수
onStartCommand
서비스를 시작하도록 요청하는 메소드이다.
이 메서드가 실행된다면 서비스가 실행되고 백그라운드에서 서비스가 무한히 실행될 수 있다.
서비스를 시작하려는 곳에서 startService() 로 호출된다.
이 메소드가 실행된다면 stopSelf() 혹은 stopService()가 호출되기 전까지 무한히 실행된다.
바인딩만 제공하고 싶다면 구현하지 않아도 상관 없다.
onBind
다른 구성요소와 서비스에 바인딩되려는 경우에 호출한다.
서비스가 죽어있다면 바인드 서비스를 실행하도록 요청하는 메소드라고 볼 수 있다.
바인딩을 실행하려는 곳(예를 들면 Activity)에서 bindService()를 써서 호출된다.
구성요소와 서비스가 소통을 할때 사용되는 IBinder 를 반환한다. 바인딩을 허용하지 않을 때는 null을 반환한다.
onCreate
onStartCommand() 또는 onBind()를 호출하기 전에 호출한다.
일회성으로 실행되며, 서비스가 이미 실행 중이면 onCreate()는 호출되지 않는다.
onDestroy
서비스를 소멸시킬 때 호출한다.
각종 리소스를 정리하기 위해 구현해야 한다.
서비스의 재시작
재시작을 위해선 onStartCommand 의 return 값에 의해서 정의된다.
START_STICKY
시스템이 서비스를 중단하면 다시 재시작한다.
START_NOT_STICKY
시스템이 서비스를 중단하면 재시작하지 않는다.
조금 어려운 Service 설명
Service
백그라운드 작업을 위한 애플리케이션 구성요소, activity 는 사용자에게 보이는 화면이고, service 는 뒤에서 수행한다.
예를 들어 음악실행, 파일입출력, 네트워크 트랜젝션, 전화앱 키지 않아도 전화를 받을 수 있는 것이 service가 수행하는 기능이다.
서비스의 종류로는 백그라운드, 바인더, 포그라운드가 있는데 각각 역할은 다음과 같다.
- 백그라운드 : 사용자에게 보이지 않는 작업 수행
- 바인더 : 바인딩을 위한 서비스. activity 를 service 에 바인딩해 서비스와 상호작용 가능. bindService() 로 호출해 사용. 바인딩 해제시 해당 서비스 소멸
- 포그라운드 : 사용자에게 직접 보이는 작업 수행. 에를 들면 음악 트랙 재생시 포그라운드 사용. activity 가 아니라 서비스인 이유는 사용자가 다른 앱을 사용중이어도 실행되도록 하기 때문이다.
서비스 호출 메소드는 다음과 같다.
- startService() : activity 에서 startservice() 써서 서비스 호출시 onStartCommand() 가 호출되고 중단 전까진 실행중인 상태. stopSelf()로 스스로 중단하거나 다른 프로세스에서 stopService()로 중단.
- bindService() : 한 activity 에서 이를 호출 시 해당 서비스는 해당 요소가 바인딩된 경우에만 실행. 서비스의 모든 바인딩이 해제되면 시스템에 의해 소멸
서비스 생성 메소드는 다음과 같다.
- onCreate()
서비스 시작 메소드는 다음과 같다.
- onStartCommand() : 서비스 시작 요청. 서비스를 실행하는 곳에서 startService() 로 호출. 바인딩만 제공시 안써도 됨.
- onBind() : 요소와 서비스 바인딩 요청. 바인딩 실행하는 곳에서 bindService()로 호출. return 으로 IBinder 반환.
서비스 재시작 메소드는 다음과 같다.
- onStartCommand() 의 반환값에 의해 결정.
- START_REDELIVER_INTENT : 서비스 중단 후 서비스 재생성. 마지막 인텐트로 onStartCommand 호출
- START_STICKY : 서비스 중단 후 서비스 재생성. null 인텐트로 onStartCommand 호출.
- START_NOT_STICKY : 시스템 서비스 중단 시 서비스를 재생성하지 않음. 다시시작하는 경우 적합.
startService 와 bindService 의 차이점
Android에서 서비스를 시작하는 방법에는 startService()를 사용하는 방법과 bindService()를 사용하여 서비스에 바인딩하는 두 가지 방법이 있습니다. 이 두 가지 방법의 주요 차이점은 다음과 같습니다.
- 수명 주기: 서비스가 startService()를 사용하여 시작되면 stopService() 또는 stopSelf() 메서드를 사용하여 중지될 때까지 백그라운드에서 계속 실행됩니다. 반면 서비스가 bindService()를 사용하여 바인딩되면 클라이언트가 바인딩되어 있는 동안에만 서비스가 활성화됩니다. 모든 클라이언트가 서비스에서 바인딩 해제되면 시스템은 서비스의 onUnbind() 메서드를 호출하고 서비스는 startService()를 사용하여 시작되지 않는 한 파괴됩니다.
- 통신: startService()는 클라이언트와 서비스 간의 단방향 통신입니다. 클라이언트는 서비스를 시작하고 서비스는 독립적으로 실행됩니다. 클라이언트는 인텐트 엑스트라를 사용하여 서비스에 데이터를 전달할 수 있지만 클라이언트와 서비스 간에는 직접적인 통신이 없습니다. 반면에 bindService()는 클라이언트와 서비스 간의 양방향 통신을 허용합니다. 클라이언트는 ServiceConnection 개체를 사용하여 서비스에 메시지를 보낼 수 있고 서비스는 Binder 개체를 사용하여 클라이언트에 다시 메시지를 보낼 수 있습니다.
- 반환 값: startService()는 어떤 값도 반환하지 않습니다. 클라이언트는 서비스를 시작하고 서비스는 독립적으로 실행됩니다. 반면에 bindService()는 바인딩이 성공했는지 여부를 나타내는 부울 값을 반환합니다.
- 접속 개수: startService()는 여러 클라이언트에서 동시에 사용할 수 있으며 서비스는 모든 클라이언트가 중지할 때까지 백그라운드에서 계속 실행됩니다. 반면에 bindService()는 한 번에 하나의 클라이언트에서만 사용할 수 있습니다. 이미 다른 클라이언트에 바인딩된 상태에서 다른 클라이언트가 서비스에 바인딩을 시도하면 시스템에서 RuntimeException이 발생합니다.
요약하면 startService()는 백그라운드에서 장기 실행 작업을 수행하려는 경우에 유용하고 bindService()는 클라이언트와 서비스 간에 직접 통신 채널을 설정하려는 경우에 유용합니다.
'개발 > Android Studio' 카테고리의 다른 글
[Android Studio] IPC, RPC 차이점 (0) | 2023.03.13 |
---|---|
[Android Studio] parcel, marshalling 이란 (0) | 2023.03.06 |
[Android Studio] Activity란, Activity생명주기 (0) | 2023.03.03 |
[Android Studio] largeheap true 란 memory 관리법 (0) | 2023.02.24 |
[Android studio] 어플리케이션 간 100MB 이상 데이터 옮기는 법 (0) | 2023.02.23 |