" startService(..)
해당 서비스를 사용하여 Android 서비스를 시작 하면 명시 적으로를 호출 할 때까지 계속 실행 stopService(..)
됩니다. 시스템에서 서비스를 실행할 수있는 두 가지 이유가 있습니다. 누군가 호출 Context.startService()
하면 시스템이 서비스를 검색합니다 (서비스를 생성하고 다음과 같은 onCreate()
경우 해당 메서드를 호출). 필요) 그런 다음 onStartCommand(Intent, int, int)
클라이언트가 제공 한 인수를 사용하여 해당 메서드 를 호출합니다 .이 시점에서 서비스는 Context.stopService()
또는 stopSelf()
호출 될 때까지 계속 실행 됩니다. Context.startService()
중첩되지 않는 여러 호출이를 여러 번 호출 onStartCommand()
하므로 서비스가 시작된 횟수에 관계없이Context.stopService()
되거나 stopSelf()
호출되지만 서비스는 해당 서비스를 사용할 수 있습니다.stopSelf(int)
시작된 인 텐트가 처리 될 때까지 서비스가 중지되지 않도록하는 메소드입니다.
클라이언트는 Context.bindService()
서비스에 대한 지속적인 연결을 얻기 위해 사용할 수도 있습니다 . 마찬가지로 아직 실행 중이 아닌 경우 서비스를 생성 onCreate()
하지만 (실행하는 동안 호출) 을 호출 하지 않습니다 onStartCommand()
. 클라이언트는 IBinder
서비스가 onBind(Intent)
메서드 에서 반환 하는 객체를 수신하여 클라이언트가 서비스를 다시 호출 할 수 있도록합니다. 서비스는 연결이 설정되는 한 계속 실행됩니다 (클라이언트가 서비스의 참조를 유지하는지 여부에 관계없이 IBinder
). 일반적으로 IBinder
반환되는 것은 AIDL로 작성된 복잡한 인터페이스에 대한 것입니다.
서비스를 시작하고 연결을 바인딩 할 수 있습니다. 이러한 경우 시스템은 서비스가 시작되거나 Context.BIND_AUTO_CREATE
플래그를 사용하여 하나 이상의 연결이있는 한 서비스를 계속 실행합니다 . 이러한 상황 중 어느 것도 유지되지 않으면 서비스의 onDestroy()
메서드가 호출되고 서비스가 효과적으로 종료됩니다. 에서 돌아 오면 모든 정리 (스레드 중지, 수신자 등록 해제)가 완료되어야합니다 onDestroy()
. "