마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

BroadcastReceiver가 앱이 종료돼도 계속 동작하게 하는 법

0 추천
Screen ON, OFF 이벤트를 받고있습니다.

앱이 종료되어도 쭉 이벤트를 수신할 수 있는 방법이 있나요?
음무 (17,820 포인트) 님이 2019년 1월 15일 질문

1개의 답변

0 추천
원래는 앱이 제거되기 전 까지는 잘 작동할텐데요?

이벤트는 수신했지만, 그 이후의 작업이 안되서 질문을 하시는 건지 로그를 찍어보세요.
쎄미 (162,410 포인트) 님이 2019년 1월 15일 답변
어떤 방식으로 구현해야하나요 ?
1. 브로드캐스트리시버를 상속받는 클래스 생성 -> 메인액티비티 실행시 해당 리시버 등록
= 언레지 하지 않았음에도 앱 종료 후 이벤트를 받지 못하네요

2. 30초마다 지속적으로 서비스를 호출, 서비스에서 BroadcastReceiver 생성 후 등록
= 다음날 리시버가 이벤트를 받지 못하는현상 발생 ..


단순히 생각 했을때는 1번 방식으로 하면 언레지를 호출하기 전까지는 앱이 종료되어도 계속 이벤트를 받을 수 있어야할것같은데 .. 그러지 않으니 의아하네요

정확히는
브로드캐스트리시버를 상속받는 클래스 생성, 매니패스트에 리시버 등록
메인액티비티 실행시 리시버클래스 레지 등록
앱 실행중에는 온오프를 잘 받는데 앱 종료 후 받지못하고있네요 ..
액티비티에서 등록/해제하면 앱 종료되면 못 받는게 당연하고요, manifest에 등록해놓으면 앱 종료와는 무관하게 받을 수 있습니다.
manifest에 등록해놨으면 굳이 액티비티에서 등록/해제할 필요 없고요.
아마 앱 종료 후에 리시버에서는 받았는데, 액티비티가 없어서 다음이 진행 안되는 것 같으니 로그 찍어보세요.
manifest에 receiver 등록하셨으면 앱 종료 여부와는 상관없이 서비스 돌아갑니다.
실행중엔 잘돌아가고 종료 후엔 안돌아가는거면 아마 라이프 사이클 관련인듯 합니다.
2번같은 경우는 AlarmManager를 이용하셔서 해결하시면 되구요.
6.0부터는 매니패스트에 등록해도 ON/OFF 이벤트는 못받는것같더라구요 ..
AlarmManager를 이용해 서비스로 리시버를 등록해서 하는 경우
백그라운드에서 wifi size가 0이나오는경우는 어떻게 해야할까요 ?
AlarmManager는 System Clock으로 스케줄링하기 때문에 네트워크 상태와는 연관 없습니다.
단, 버전에 따라 동작을 구현해줘야 되고, 복잡한 시간 계산을 해야되기 때문에 FCM을 이용하는걸 추천드립니다.
...