백그라운드 작업을 실행하는 방법에는 몇 가지가 있습니다. 내 유스 케이스는 내 GUI가 실행 중인지 여부와 상관없이, 그리고 전화가 잠자고 있든 없든 관계없이 x 분마다 데이터 피드를 가져 오는 것입니다.백그라운드 작업 예약 방법
저는 alarmmanager를 사용하여 방송 수신자와 일치하는 인 텐트를 예약합니다. onRecieve 메서드에서 나는 AsyncTask를 생성하는 서비스 (startService)를 시작한다. 작업은 데이터를 가져 와서 저장 한 다음 서비스를 stopSelf()합니다.
onRecieve 메소드에서 서비스를 시작하기 전에 PARTIAL_WAKE_LOCK을 받고 서비스에서 stopSelf()를 호출하기 직전에 다시 릴리스합니다.
정말이 방법이 최선입니까? 이 시나리오에서 서비스가 필요합니까?
설치가 몇 시간 동안 작동하고 갑자기 멈추는이 설정에서는 이상한 동작이 발생하여 디버깅하기가 매우 어렵습니다.
누구나 같은 결론을 달성하는 간단한 간단한 방법이 있습니까?
아하! 그래서 나는 방송 reciever에서 내 asynctask를 시작할 수 없었다? 비록 내가 onrecieve에서 wakelock을 얻었고 asynctask가 끝나면 그것을 놓아도? 정보를 주셔서 감사 드리며, 내 이상한 알람이 멈추는 데 더 많은 시간을 할애해야합니다. – Wilken
"방송사에서 내 asynctask를 시작할 수 없습니까?" 나는 그렇게 생각하지 않지만, 나는 그것을 시도하지 않았다.AsyncTask에는 자체 스레드 풀이 있으며, BroadcastReceiver에서 안전하게 AsyncTask를 실행할 수 있습니다. – CommonsWare
IntentService를 사용해 주셔서 감사합니다. 그 사실을 몰랐습니다. 이제 서비스와 AsyncTask를 삭제했습니다. 훨씬 더 우아합니다. – Wilken