매거진 Android 개발

Android M, 배터리 최적화

Android

by Kein

생활비 지출을 관리하기 위해 통장 하나에 체크 카드 2개를 만들어 부부가 사용하고 있다.

한달에 소비를 얼마나 하는지 관리하기 위해서 내 폰으로 전달되는 통장 입/출금 안내 문자를 와이프와 공유하기 위해서 앱을 만들었다.


1. 입.출금 문자를 받으면 local db 에 내역을 기입하고

2. 이번달 총 지출, 수입을 전달 받은 문자에 덧붙여

3. slack 채널에 메시지를 전송한다.


그런데 앱을 설치하고 몇 일간은 잘 동작 하더니, 언제 부턴가 slack 에 메시지 전송이 안된다.

앱을 열어보면 SMS 수신 내역은 차곡 차곡 쌓여 있고, slack 으로 전송을 하지 못한거다.


이건 Android M 배터리 최적화와 관계가 있다. (삼성의 스마트매니저 같은거다.)

내가 앱을 평소에 실행시키지 않으니 OS가 알아서 이 앱을 배터리 최적화 대상으로 분류한 것.


그런데, SMS 수신도 잘 하고, 수신 후 local db 기록도 잘 하고 있다.

단지, 네트워크 이용만 차단된 것.

최적화 되서 동작을 못했다면 sms 수신도 못 했어야 되는거 아닌가? 싶지만.. 어쨋든 이유는 이렇다.


배터리 최적화 메뉴에서 내 앱을 최적화되지 않음 으로 설정해서 해결 할 수 있다.




그런데 이 앱을 일반 사용자 대상으로 배포했다면, 제대로 동작되지 않는 앱이 되서 버림 받게 되겠지.

일단은 최적화 당(?)하지 않도록 편법을 쓸 수 있다.


기본 개념은 사용자가 눈치채지 못하게, 내 앱을 잠시 실행시켯다 종료 하는것.

제일 자연 스러운 시점은 배터리 충전 케이블이 연결되거나, 분리되는 시점, 또는 잠금 화면이 해제되는 시점에 내 앱의 투명한 Activity를 띄웠다가 종료하는 방법이다. (매번 실행되지 않도록 flag 를 두어 하루 한 번 정도 실행되게 하는게 좋다.)


이렇게 삼성 스마트 매니저와 M 에서 최적화를 피할 수 있다.


근데,

내가 배터리 최적화를 만든 사람 이라면,

실제 사용자가 런처에서 앱을 실행 시키는 것 만을 판단할 수 있도록 조건을 더 넣어서 이런 우회 방법을 막을 거 같다.



일단 그 때 까지는...

keyword