티스토리 뷰

  Android M에는 배터리 대기시간을 늘리기 위한 모드인 Doze 모드가 있습니다.  Doze는 일정시간동안 폰 사용이 없게되면 완전 잠에 빠지는 기능입니다. 완전 잠에 빠지게 되면 백그라운드에서 동작하는 기능들이 정지하게 됩니다. 


 이를 통해 대기시간을 늘려주는 역할을 하는것이 Doze 모드입니다.



 이렇게 변경될 예정인 Doze 모드. 이에 대한 개발자들의 조치해야할 부분이 무엇인지, 어떤점이 달라지는지에 대한 정보를 공유하고 합니다.

 이 글은 Google I/O Extended Seoul에서 구글코리아 양찬석님의 발표 중 Doze 부분을 정리한 내용입니다.

 안드로이드 M의 주요 변경 사항 발표 자료http://www.slideshare.net/chansukyang/m-50490336



일정 시간 반응이 없을 경우 Doze에 빠져든다.

 대기 시간을 늘려주기 위해서 Doze가 적용되었습니다. 액정이 꺼지고 일정시간 아무런 반응이 없다면 Doze 모드에 빠져들게 됩니다.

 이 Doze 모드는 IDLE 상태와 IDLE Maintenance 모드를 합쳐서 Doze라고 합니다.


 Doze 모드가 적용되면 다음과 같은 동작이 불가능 해지게 됩니다.

  •  네트워크 작업 불가능
  •  백그라운드 작업 불가
    • JobScheduler, AlarmManager, etc...
  • WakeLock 무시 됨
  • WiFi Scan 멈춤

 위와 같은 작업들이 멈추게 됩니다. 사실 Doze에 빠지면 아무것도 동작하지 않게 되게됩니다. 네트워크도 끊어지게 됩니다. 여기서 중요한 사실...은 아래에서^^;


 추후 GCM을 통해 잠깐 앱을 깨울 수 있는 정도만 허용한다고 합니다. 이에 따른 개발자가 주의해야할 점 역시 아래에서.. 간단히 정리해보겠습니다.



Doze 백그라운드로 동작하지 않는다...

 모든 앱이 정말 동작하지 않는 것은 아닙니다. 폰을 사용함에 있어서 필요한 요소인 전화, 문자, 알람 등 최소한의 기능만을 사용할 수 있습니다.

 현재 M Preview 2에서도 Play store 앱이 액정이 꺼진 상태로는 거의 업데이트가 진행되지 않음을 확인할 수 있었습니다. 이는 아래 이미지(Ignore optimizations)와 같은 배터리 최적화 예외처리가 되어 있는대도 불구하고 실제 동작은 하지만 최소한의 배터리 사용을 위해 거의 동작하지 않는다고 볼 수 있습니다.



 추후 예외처리가 가능해질 수 있겠으나, 현재 Preview 2에서는 예외처리가 불가능합니다. 기본적으로 구글에서 제공하는 4가지 앱이 배터리 최적화 무시에 들어가있습니다. 다운로드 메니저, 구글 연결 서비스, Play service, 구글 Play store 가 예외처리가 되어 있습니다. 


 아래 목록을 눌러서 사용자가 직접 예외처리를 할 수 있었습니다. 잘 확인 하지 않고 글을 썼네요....


 배터리 예외처리 목록에서 아래와 같은 메뉴를 눌러주시면 허용, 모든 앱, 허용하기, 비허용 4가지 메뉴가 표시됩니다.

 허용하기에서 추가앱을 허용할 수 있습니다. 우선 이 메뉴에 접근하여 사용자가 직접 허용을 할 수 있습니다. 단, Google Play store에서 동작하던것처럼 아주 느리게 동작할것이라는 점입니다.

 그리고 사용자가 직접 허용을 해주어야 허용이 되는것이니.. 무분별하게 허용하지 않도록 가이드 해주셔야 합니다. 자신들의 앱에서 필요하니 무조건적으로 허용을 요청하거나 하는 일은 없어야 합니다.

 허용을 하지 않아도 정상 동작하는 앱

  • 알람 어플 (표준 알람 등록을 하는 어플)
  • 노래(표준적으로 노래를 재생하는 어플)
  • 그외 폰에 필요한 최소한의 서비스


개발에 있어서 주의할 점

 Doze가 적용되면 아래와 같은 서비스가 동작하지 않게됩니다. 가장 중요한건 네트워크 작업이 불가능해진다는 점입니다.

  •  네트워크 작업 불가능
  •  백그라운드 작업 불가
    • JobScheduler, AlarmManager, etc...
  • WakeLock 무시 됨
  • WiFi Scan 멈춤

 네트워크 작업이 불가능 함으로 인해 다음의 기능을 사용할 수 없게 될 수 있으며, 최적화 모드 진입시 동작하던 앱이 중단 될 수 있습니다.

  • 일부 네트워크를 통해 백업이 진행되는 앱이 정지를 멈추게 됩니다.
  • 기본적으로 네트워크 연결이 끊어지므로, GCM을 제외한 서드파티 PUSH 서비스의 사용이 불가능 해집니다.
    •  M 정식 버전이 나오게 되면 GCM 만을 통해 기기의 상태를 잠시 활성 상태로 변경하고, 간단한 팝업이나 노티 정도의 정보를 제공해줄 수 있을것으로 보입니다.
  • Doze 간에는 어떠한 앱도 활성 상태로 돌리지 않게하여, 최대한의 대기상태를 끓어내기 위함.
  • 추가로 위에서 보았던 배터리 최적화 무시 탭에는 API를 통한 접근은 어렵습니다.
    • 만약 이에 대한 API를 허용해준다는 말은 지금과 달라질 점이 없습니다. 그래서 허용해주지 않을것이라고 하네요.


 기본 네트워크 연결이 중단됨으로 인해 서드파티에서 푸쉬를 받기 위해 네트워크 연결을 해두는 작업은 더이상 불가능해지게 됩니다.

 이런 작업들은 앞으로 GCM을 통해서만 가능하게 할것이라, GCM이 아닌 경우에는 푸쉬가 도착하지 않을 수 있습니다. 사용자에게 필요한 푸쉬를 정상적으로 보내지지 않게되면 문제가 생길 수 있겠습니다. 이에 따른 대응으로 GCM을 통한 푸쉬 서비스를 하지 않고 있다면 변경을 해주어야 하겠습니다.



그래서...

 Doze가 적용된다고해서 배터리를 엄청나게 아끼거나 하지는 못하지만, 최대한의 대기 상태를 만들어 주기 위함입니다. 애플 제품의 경우 배터리 대기시간이 깁니다. 안드로이드랑 비교할 수 없을 정도입니다.(중국의 안드로이드는 대기시간이 5일 이상인 경우가 많습니다....)

 그에 비해 안드로이드는 액정이 꺼져도 백그라운드를 허용해주고 있어 더욱 짧은 배터리 사용시간을 가졌습니다. Android M 부터 적용되는 Doze는 이들을 무력화? 시키면서 최대한의 대기 상태를 유지하여 조금이나마 배터리를 오래 사용할 수 있도록 만드는 것입니다.(그렇다고 해도 ... 폰을 자주 자주 사용하시는 분들은 Doze의 큰 의미는 없겠습니다.)



마무리

 위에서 정리하였지만 최종적으로 하고 싶은 말은....

  • 서드파티 PUSH 시스템을 사용하고 있다면 Google GCM(Google Cloud Message)를 사용하여 Doze 상태에서도 푸쉬가 잘 올 수 있도록 해주어야 한다.
  • Doze 모드는 사용자가 최대한의 대기시간을 유지할 수 있도록 도와 정말 필요할때 배터리를 사용할 수 있도록 만들어주기 위한 최소한의 조치입니다.

위와 같습니다.



댓글