2012-07-22 5 views
1

백그라운드에서 서비스를 사용하여 업로드/다운로드 작업을 수행하는 앱이 있습니다. 이러한 작업은 사용자 선택 (파일의 크기와 크기)에 따라 다소 시간이 걸릴 수 있습니다.안드로이드가 내 서비스/스레드를 닫지 못하도록 막으십시오.

내 장치 (nexus s)와 테스트 에뮬레이터에서 모든 것이 계획대로 작동하지만 사용자가 큰 데이터를 업로드/다운로드하도록 선택할 때 작업이 때때로 방해 받는다는보고가 나타납니다.

작업은 백그라운드 서비스에서 실행되는 스레드를 사용하여 수행됩니다. 내 생각에 OS는 때때로 메모리가 부족한 장치에서 스레드 및/또는 서비스를 종료합니다.

서비스 onStartCommand() 함수에서 처리 할 데이터를 처리 할 스레드를 발생시키고 START_NOT_STICKY를 반환합니다. startService (i)를 사용하고있는 활동에서 바인딩이 수행되지 않습니다.

어떻게 예방할 수 있습니까? 시스템이 내 서비스 나 스레드를 죽이지 않도록 어떻게 할 수 있습니까?

답변

1

startForeground()을 사용하면 목표를 달성하는 데 도움이 될 수 있습니다. 문서에서

는 :

A는 사용자가 적극적으로 인식 시스템이 이 뭔가 것으로 간주 전경 상태에서 서비스를 넣어 startForeground (INT, 알림) API 를 사용할 수있는 서비스입니다 시작했다 따라서 메모리가 부족할 때 살해 후보자가 아닙니다. (서비스가 현재 전경 응용 프로그램에서 극단적 인 메모리 압력 에서 살해하는 것은 여전히 ​​이론적으로 가능하지만, 실제로는이 없는 문제가 될 수 있습니다.) 이미 표시하고 알림 동안 업데이트하고

+0

프로세스가 실행 중입니다. 2 개의 알림 표시를 피할 수 있습니까? – Idan

+0

두 가지 알림은 사용자를 혼동시킬 수 있으므로 코드를 다시 작성하여 전경 서비스에서 알림을 사용할 수 있습니다. – biegleux

관련 문제