2015-01-18 2 views
0

내 요구 사항은 간단합니다.android 백그라운드 인텐시브 서비스를 중지하는 방법?

간단한 앱이 있습니다. 2 단추. 1 개의 서비스. 조건 : Button1 클릭 -> IntentService.Button2 클릭 시작 -> IntentService 중지.

첫 번째 부분은 정상적으로 작동합니다. startService (intent) 명령을 사용하여 IntentService를 시작할 수 있습니다. 그러나 IntentService를 중지 할 수 없습니다. stopService (intent) 명령이 작동하지 않습니다. 오류를 던지거나 아무 것도하지 않습니다.

누구나이 부분을 밝힐 수 있습니까?

이 질문을 검색하고이 사실을 발견했습니다. How to stop an IntentService? 하지만 내 필요에 대한 대답은 아닙니다.

+0

intentservice에서 비동기 작업을 수행해야합니까? – greywolf82

+0

예. 사용자가 서비스를 중단하기 전까지 무한정의 시간 동안 백그라운드에서 서비스를 실행하고 싶습니다. (내 경우에는 버튼을 클릭하여). –

+1

'IntentService'가 어떻게 작동하는지 이해하지 못할 것 같습니다. 'startService()'를 호출하고 무엇을해야 하는지를 알기에 충분한 정보를 담고있는'Intent'를 전달합니다. 서비스가 시작되고해야 할 일은 무엇이든하고, 더 이상 할 일이 없다면 (즉, 더 이상 대기중인'Intent's) 대기열을 멈 춥니 다. 'startService()'를 또 다시 호출 할 때까지 다시 실행되지 않습니다. 그래서 현재'Intent'를 처리하고 있다면'IntentService'를 멈출 수 없으며 현재 처리중인 것이 없다면 어쨌든 실행되고 있지 않습니다. –

답변

0

IntentService을 수동으로 중지 할 수 없습니다. IntentService은 처리 할 인 텐트가 더 이상 없을 때 자동으로 중지됩니다.

버튼을 클릭하여 서비스를 중지하려면 보통 Service을 사용하십시오.

+0

오케이 ... 고마워. 10 초가 지나면 어떻게 IntentService를 다시 시작할 수 있습니까? 것은 무한 루프가 실행되고 있지만 사용자가 서비스를 중지하려면 그는해야합니다. IntentService를 사용하여 매니페스트에 일부 권한을 추가하는 방법이 있습니까? 또는 아무것도 ? –

0

나는 그것을 알아 냈다. IntentService가 프로세스의 모든 단계를 완료 할 때까지 IntentService를 중지 할 수 없습니다.

그러나 중간 점검을 할 수 있습니다. 예 : if (boolean continue == true) {then do} .esle {stopSelf(); } 그리고 'StopService'명령 대신 'continue 'to false 값을 변경할 수 있습니다.

0

그러나, 당신은 IntentService을 죽일 수 .. :-) 그것은 나 같은 비슷한 문제를 가진 사람을 도움이되기를 바랍니다. 모든 스레드 대기열이 완료되면 서비스가 자동으로 중지됩니다. MyIntentService.this.stopSelf();Activity에서 호출해도 서비스는 중지되지만 스레드는 여전히 백그라운드 프로세스에서 실행 중입니다.

관련 문제