2012-08-15 5 views
1

장기 실행 작업> 10 초 동안 수신 서비스를 시작한다는 Android 자습서를 분석했지만 기본 스레드에서 실행중인 서비스가 아닙니까?브로드 캐스트 수신기에서 ANR에 대한 서비스 수정을 시작합니다

http://developer.android.com/guide/practices/responsiveness.html#avoiding

서비스 (http://developer.android.com/reference/android/app/Service.html)

하나가 더있는 .. 오랜 시간 작업을하지 않습니다 말한다 그때 적절한가? 도와주세요. 감사합니다. .

+1

서비스에는 Ui 스레드가 없습니다. ANR은 UI 스레드에만 해당됩니다. 그래서 서비스가 길어질 때 안전합니다. – nandeesh

+1

@nandeesh : 서비스는 메인 애플리케이션 스레드에서 가장 확실하게 실행됩니다. onCreate(), onStartCommand(), onBind() 및 onDestroy()는 응용 프로그램에서 사용하는 것과 동일한 "UI 스레드"에서 호출됩니다. "IntentService"이거나 자신의 스레드를 포크하는 경우에만 "서비스에서 오랜 작업을하는 것이 안전합니다". – CommonsWare

+0

@CommonsWare 나는 그것에 대해 그렇게 생각하지 않았습니다. 당신 말이 맞아요. 감사!! – nandeesh

답변

1

주 스레드에서 서비스가 실행되지 않습니까?

의주기 메소 Service (예 onStartCommand()) 메인 프로그램 스레드 불린다. 그러나 Service은 매니페스트 등록 BroadcastReceiver과 달리 백그라운드 스레드를 안전하게 포크 할 수 있습니다. IntentService은이 작업을 자동으로 수행하므로 여러 시나리오에서 매니페스트 등록 BroadcastReceiver과 페어링하는 것이 이상적입니다.

+0

서비스 또는 Intentservice를 사용하는 것이 더 좋습니까? –

+1

@RandonP : 그것은 당신이하는 일에 달려 있습니다. 당신이하려는 일이 다소 "트랜잭션 적"(예 : 디스크에 무언가를 쓰거나, 인터넷에서 무언가를 다운로드하는 것)이라면, IntentService가 잘 작동 할 것입니다. OTOH가 장시간 실행될 일을하려고한다면 (예 : 들어오는 채팅 메시지에 대해 소켓에서 수신하는 스레드를 관리하는 서비스를 사용하는 채팅 클라이언트), 자신의 일정한 '서비스' 백그라운드 스레드는 아마도 더 좋은 아이디어 일 것입니다. – CommonsWare

관련 문제