2011-11-08 2 views
1

BroadcastReceiver에서 네트워크 작업을 수행하고 있습니다. 이 작업은 백그라운드에서 수행되며이 경우 앱이 실행되지 않습니다.백그라운드에서 네트워크 작업을 수행하려면 무엇을 사용해야합니까?

어느 것이 더 사용 하시겠습니까? Service 또는 AsyncTask?

+2

중복 가능한 [Android : AsyncTask vs Service] (http://stackoverflow.com/questions/6957775/android-asynctask-vs-service) –

+2

중복 될 수 있다고 주장하고 싶습니다. 사용할 때 특별한 고려 사항이 있습니다. BroadcastReceiver. 이 특별한 경우에는 서비스를 사용해야합니다. –

답변

2

BroadcastReceiver 개체는 onReceive() 호출 기간 동안 만 유효합니다. 이 함수에서 코드가 반환되면 시스템은 객체가 완료되고 더 이상 활성화되지 않은 것으로 간주합니다. 따라서 여기서 AsyncTask 또는 Thread을 사용하는 것이 좋습니다. documentation에서 또한

: 특히

, 당신이 브로드 캐스트 리시버 내에서 서비스에 대한 대화 또는 바인드가 표시되지 않을 수 있습니다.

이 브로드 캐스트 리시버가 <receiver> 태그를 통해 출시 된 경우

, 그 객체는이 함수에서 반환 후 더 이상 살아 없습니다. 즉, 결과를 비동기 적으로 반환하는 작업을 수행하면 안됩니다. 특히 서비스와 상호 작용하는 경우에는 bindService() 대신 startService()을 사용해야합니다. 이미 실행중인 서비스와 상호 작용하려면, 당신은 peekService()

을 사용할 수 있습니다 이것이 의미하는 것은 당신이 당신의 방송 RCVR에서 할 수 startService()는 의도를 통해 네트워크 운영에 필요한 데이터를 전달합니다. 서비스가 네트워크 작업을 수행합니다. 서비스가 끈적 거리면 peekService()을 사용할 수 있습니다. 그러나 결코 당신을 방송 rcvr에 bindService()해야합니까.

+0

더 관련있는 인용문은'이것은 장기 실행 작업의 경우 BroadcastReceiver와 함께 서비스를 사용하여 작업 과정 전체에 걸쳐 포함 된 프로세스를 활성화 상태로 유지한다는 것을 의미합니다. ' –

+0

흠, 나는 그것을 놓쳤습니다. 'registerReceiver()'를 사용하여 의미합니까? – Reno

+0

실제로는 BroadcastReceiver에서 서비스를 시작하여 가능한 빨리 수신기를 반환해야합니다. 인 텐트를 통해 서비스에 데이터를 전달할 수 있습니다. –

2

서비스를 개선하십시오. AsyncTask는 주로 UI를 차단하지 않습니다.

관련 문제