안녕하세요 초보 개발자입니다.
안드로이드 앱에서 BLE 스캐닝 기능을 구현하고있습니다. 이는 foregroundService에서 notification을 띄운채로 앱이 꺼져도 계속해서 서비스가 동작하는 형태입니다. Service 내에는 AlarmManager가 1분에 한번씩 ble Scanner를 작동시켜 scan을 60초 진행합니다. 어떻게 보면 무한으로 ble scanning 하는 기능이죠.
해당 앱은 200시간 넘게 테스트 해본 결과 동작은 잘하지만 문제는 Doze 모드 진입시 입니다.
PC 터미널에서 adb 로 배터리 충전 해제 밑 doze 모드로 강제 진입 후 테스트 내용입니다.
1분에 한번씩 AlarmManager가 지정된 scanner 동작은 정상적으로 동작중인 것으로 확인이 됩니다.
문제는 여기서 Scanning Result가 DOZE 모드 진입 전과는 차이가 확연하게 나타납니다. Scanning Result가 계속 해서 쌓여야하는게 정상인 반면에, DOZE 모드 에 들어오면 scanning result 가 1개~2개 정도로 드문드문하게 들어옵니다.
참고로 ble 신호를 advertising 하는 기기에 대한 scanfilter는 해당 기기의 이름으로 진행했으며, 그 해당 기기는 버튼동작으로 ble 신호를 약 5초간 advertising 하도록 설정을 해놨습니다.
요약을 하자면 doze mode 진입후에는 alarm manager로 스케쥴된 주기적인 ble scanner는 정상 동작 하는거 같으나, 신호가 거의 안 들어오는 문제입니다.
혹시 제가 놓치는 부분이나 그런게 있는지 알려주실 수 있으면 정말 큰 도움이 될것같아요.