2012-04-17 5 views
2

여러 가지 활동으로 구성된 앱이 있습니다. 모든 활동은 로컬 서비스에 액세스해야합니다. 나는 응용 프로그램을 시작할 때 서비스가 시작되고 싶지 및 정지 할 때Android 서비스 시작/중지

앱은 (다시 키)

b)는 파괴 앱이 정지되는) (홈 키)

C) 장치가 잠자기 상태입니다 (전원 키)

기본적으로 보이는 작업이 없을 때 서비스가 실행되지 않아야합니다.

onResume()의 모든 활동에서 서비스를 바인딩하고 onPause()의 모든 활동에서 서비스를 바인딩 해제합니다. 불행히도 새 활동이 서비스를 바인딩하기 전에 언 바운드되기 때문에 활동을 전환 할 때마다 서비스가 다시 작성됩니다.

아무도 지금 방지하는 방법이 있습니까?

답변

1

Context.BIND_AUTO_CREATE를 사용하여 바인딩한다고 가정하면 거의 다 있습니다. 서비스를 onStart()에 바인딩하고 onStop()에서 바인딩 해제합니다. 두 번째 작업의 시작은 응용 프로그램이 첫 번째에서 두 번째로 전환 할 때 첫 번째 작업이 중지되기 전에 발생해야합니다. 내 응용 프로그램에서이 기법을 사용하고 모든 on .. 메서드를 기록했습니다.

FIRST Activity onCreate 
FIRST Activity onStart 
FIRST Activity onResume 
FIRST Activity onPause 
SECOND Activity onCreate 
SECOND Activity onStart 
SECOND Activity onResume 
FIRST Activity onStop 

그래서 짧은 순간 두 활동이 전혀 해를 끼치 지없는 서비스에 바인딩 : 나는 전환 할 때이 순서대로 발생합니다. 활동이 제한되지 않으면 서비스가 중지됩니다.

+0

고마워요, 그게 내가 찾고 있던 바로 그거야! – osiris81

0

this을 살펴보십시오. 당신이 onStartCommand() 콜백 방법을 구현하기 위해 선택하는 경우 서비스 가 지금 시작하는 것으로 간주되기 때문에

그러나, 당신은 명시 적으로 서비스를 중지해야합니다. 이 경우 서비스는 까지 실행되고 서비스는 stopSelf()로 중지되거나 다른 구성 요소는 클라이언트에 바인딩되었는지 여부에 관계없이 stopService()를 호출합니다.