2012-11-07 7 views
2

원격 백그라운드 서비스를 구현하는 응용 프로그램이 있습니다. 이 서비스는 스레드로 파일을 다운로드하기 위해 구현됩니다 (이 서비스는 다운로드 관리자로 작동합니다).Android 서비스가 종료되지 않도록 하시겠습니까?

파일을 다운로드하려면 서비스에 URL을 보내면 서비스에서 실제로 파일을 다운로드하는 스레드 (AsyncTask를 사용했지만 Android 4.1에서만 작동 함)를 시작합니다. 그러나 조만간 다운로드가 중단되며, 내가 알리는 알림이 더 이상 업데이트되지 않기 때문에 알 수있었습니다. 알림을 클릭하여 다운로드를 취소하면 서비스에 보류중인 의도가 전송되어 다운로드를 취소하지만 서비스가 다시 만들어지면 다운로드가 취소되지 않습니다 (onCreate가 호출 됨).

편집 : 내가 onStartCommand에 START_STICKY를 돌려 말을 잊어 버렸()

어떻게 해결을해야합니까? 서비스가 죽는 것을 피하는 방법은 없습니까?

startForeground()도 찾고 있었는데 서비스 대상이 하나의 파일 만 다운로드하는 것이 좋지만 여러 파일을 동시에 다운로드 할 수있게하려면 좋겠다.

감사합니다.

답변

2

서비스가 종료되지 않게하는 유일한 방법은 startForeground()입니다. 심지어 이것으로 안드로이드가 당신의 서비스를 죽이지 않을 것이라는 보장은 없지만 더 좋은 점은 없다. 포 그라운드 서비스를 사용하여 성공했습니다.

+0

감사합니다. 마지막으로 서비스를 한 번에 한 번만 다운로드하도록 제한하고 startForeground()를 사용했습니다. 매력처럼 일하고! –

+0

포어 그라운드 서비스를 사용하여 여러 개의 병렬 다운로드를 수행 할 수없는 이유를 모르겠습니다. 별도의 스레드에서 각 파일을 다운로드 할 수 있습니다. 이것이 작동하지 않는 이유는 없습니다. –

+0

물론 할 수는 있지만 알림을 전달하지 않고 startForeground()를 호출해야합니다. –

0

시스템에서이 문제를 피할 수있는 유일한 방법은 서비스를 시스템 서비스로 만드는 것이지만 AOSP 권한을 가지고 SystemService 클래스를 확장해야합니다.

이러한 SystemService는 모든 Android System Services의 구성 인 services.jar의 일부로 컴파일하고 만들어야합니다. 불행히도 이것은 외부 서비스가 시스템에 문제를 제기 할 수 있다는 점을 감안할 때 시스템 서비스 안정성의 위험을 증가시킵니다.

물론 이것은 응용 프로그램 개발자가 쉽게 할 수있는 것이 아니며,이 방법은 전체 AOSP를 사용하는 OEM/SoC 공급 업체를위한 것입니다.

관련 문제