2010-03-13 6 views
3

내 앱에 다른 활동이 아직 살아 있는지 테스트 할 수있는 방법이 있습니까? onDestroy 메서드에서 서비스를 중지하고 싶지만 스택에 아직 살아있는 다른 응용 프로그램이없는 경우에만이 작업을 수행하려고합니다.앱 실행 중에 다른 활동이없는 경우에만 Android 서비스를 중지하는 방법은 무엇입니까?

주 활동의 onDestroy() 메소드에서 서비스 중지를 호출했습니다. 이 기능은 사용자가 내 앱을 실행 한 다음 내 앱에서 몇 가지 활동을 시작한 다음 홈 화면을 터치하고 내 앱을 놓으면 내 주문을 파괴하고 주요 활동이 내 앱의 다른 활동보다 우선한다는 것을 제외하고는 완벽하게 작동합니다. 이 상태에서 다시 버튼을 누르고 내 홈 화면에서 '뒤로'이동하면 스택에 다른 활동이 열려 있어도 onDestroy() 메소드가 실행되고 서비스가 종료됩니다. 스택에 열린 다른 활동이 없다고 확신하는 경우에만 서비스를 중지하여이 문제를 방지하고 싶습니다. 가능한?

+0

이것은 내가 처음 생각한 것보다 까다 롭습니다. onDestroy() 메서드에서 조건부로 서비스를 중지한다는 생각은 서비스를 중지 할 호출이 결코 없기 때문에 좋지 않습니다. 그래서 근본적인 질문이 남았습니다. 내 앱의 활동이 스택에있는 한 계속 실행될 서비스를 시작하려면 어떻게해야합니까? – JohnRock

답변

16

내가 내 응용 프로그램의 모든 활동이 스택에 여전히만큼 계속 실행됩니다, 아직 남아 아무도 때 중지 서비스를 시작할 수 있습니까?

startService()stopService()을 사용하지 마십시오. 대신 바운드 연결이 실제로 필요하지 않더라도 bindService()unbindService()을 사용하십시오. 바인드/바인드 해제는 참조 카운트입니다. BIND_AUTO_CREATE 플래그로 bindService()으로 전화하면 첫 번째 bindService() 전화가 서비스를 시작합니다. 그런 다음 bindService() 전화에 모두 unbindService() 전화가 걸려 오면 Android가 자동으로 서비스를 종료합니다.

+0

고맙습니다. 당신은 그때 내 애플 리케이션에서 모든 작업이 그것을 계속 살아 bindService()를 호출해야한다고 말하는 건가요? 그리고, 각 액티비티는 destroy 메소드에서 unbindservice를 호출해야합니까? 이 서비스는 데이터를 활성 바인딩 활동으로 어떻게 푸시합니까? – JohnRock

+0

"내 앱에서 모든 작업을 수행하려면 bindService()를 호출해야합니다. 당신이 "모든 활동"이라고 말하려고했다면, 나는 전혀 모른다. 당신은 어떤 활동이 서비스를 기억에두고 어떤 활동을하지 않는지 담당하는 사람입니다. "그리고 각각의 활동이 그 파괴 방법에서 언 바인딩을 호출해야합니까?" 서비스에 바인딩하는 모든 활동은 서비스에서 바인딩 해제해야합니다. "서비스가 어떻게 데이터를 활성 바인딩 활동으로 푸시합니까?" 당신이 오늘 그렇게하는 것과 같은 방식입니다. – CommonsWare

+3

서비스가 시작/실행되기를 원하는 모든 활동은 onStop()에서'onStart()'와'unbindService()'중에'bindService()'를 호출해야합니다. 참조 : http://stackoverflow.com/questions/2304086/binding-to-service-in-oncreate-or-on-onresume/2304794#2304794 서비스는 바인딩 된 활동으로 데이터를 '푸시 (push)'합니다. 'startService()'를 사용하는 것처럼 : 콜백을 서비스에 등록 할 수 있습니다. –

관련 문제