2011-10-26 4 views
8

브로드 캐스트 리시버에서 asynctask를 시작하는 것이 나쁜 습관으로 간주되는지 알고 싶습니까? 기본적으로 Google의 C2DM 서버에 등록한 다음 등록 된 브로드 캐스트 수신자를 차단하면 내 서버로 보내려고합니다.브로드 캐스트 리시버에서 asynctask를 시작하는 중

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

18

예, 이는 잘못된 행동으로 간주됩니다. onReceive()이 반환되고 실행중인 다른 활성 구성 요소가없는 경우 AsyncTaskBroadcastReceiver에서 시작하면 Android가 프로세스를 중단시킬 수 있기 때문입니다.

올바른 방법은 ServiceBroadcastReceiver에서 시작하는 것입니다. 그리고이 ServiceAsyncTask을 관리해야합니다. 이런 식으로 안드로이드는 활성 구성 요소에 대해 인식하고 안드로이드는 조기에 그것을 죽이지 않을 것입니다 (메모리 조건이 충분하지 않은 다른 중요한 조건이 발생하지 않는 한).

+0

@inazruk 감사합니다. – Hades

+1

비동기 작업에서 응용 프로그램 컨텍스트에 대한 참조가 있다면 어떻게됩니까? onReceive()가 돌아 오면 시스템이 프로세스를 죽일 수 있습니까? – 500865

+0

프로세스가 죽을 확률은이 프로세스 내부의 내용을 누가 참조했는지와는 완전히 관련이 없습니다. 살해 될 확률은 현재 진행중인 구성 요소와 수명주기의 단계에 따라 크게 달라집니다. – inazaruk

2

허니컴으로 시작하여 goAsync()으로 전화를 걸면 10 초 정도면 비동기식으로 작업 할 수 있습니다.

사용 예는 here으로 표시 할 수 있습니다.

관련 문제