안드로이드 프로그래밍을 하다보면, 위젯 어플리케이션을 개발할때가 있습니다.
이 위젯이라는 녀석은 어플리케이션 개발에서 참으로 여러가지를 할 수 있게 해주기 때문에 상당히 매력이 있는 녀석이죠.
그런데, 배터리 소모에 관한 문제에 대해서는 생각을 해보아야 합니다.
 



요즘 많이들 사용되고 있는 자주 업데이트 되어야 하는 위젯들은 보통 Service(서비스)를 백그라운드에서 실행하며 업데이트를 합니다. 하지만 서비스가 쉬지않고 계속해서 돌아가는 경우 여러가지 문제점이 있습니다.
크게는 아래의 3가지 정도가 있을 수 있습니다.


 보편적으로 사용하는 서비스 업데이트 위젯

1. 어플스토커 등의 KillerApp 에게 종료당할 수 있다.
2. 배터리가 많이 소모된다.
3. 쉬지 않고 돌기 때문에 메모리를 계속해서 사용하고 있다. 


제가 생각해 본 부분은 1초단위의 갱신이 필요한 위젯이 아니라면, 일정주기를 정해서 갱신시킬 수 있는 위젯이라면,
알람매니저(AlarmManager)와 결합하여 업데이트를 하는 것입니다.

위젯이 알람매니저와 결합했을 경우 그 위력은 한층 강력해집니다.
우선 배터리를 적게 소모합니다. 또한 서비스가 아닌, OS에 알람을 등록하는 형식이기때문에 업데이트가 종료될 경우가 거의 없습니다.

방법은 간단합니다.



 알람매니저와 결합한 위젯

앱위젯프로바이더(AppWidgetProvider)를 상속받은 클래스를 만든다.
앱 위젯의 최초 업데이트시 알람(반복 알람)을 등록한다.
이 등록된 반복 알람은 프로그래머가 설정한 일정주기에 따라 업데이트 코드를 실행시킨다.

앱위젯프로바이더를 상속받은 클래스는 Receiver의 기능을 할 수 있기 때문에,
알람매니저를 통한 Broadcasting 액션들을 캐치할 수 있습니다.

아래는 위의 과정을 간단하게 그림으로 표현해 본 것입니다.





 관련글 링크

알람매니저의 사용 : [Android] AlarmManger - 알람매니저 : Receiver, Notification - 리시버, 알림, 노티피케이션
리시버의 사용 : [Android] Service, BroadcastReceiver, boot_completed RECEIVER





Posted by croute

댓글을 달아 주세요

  1. 재원 2011.10.27 08:31  댓글주소  수정/삭제  댓글쓰기

    개발자는 아니지만, 위젯에 대한 배터리 소모량에 대해 궁금해서 알아보다가 보게 되었습니다.
    좋은 정보 감사합니다.

    그런데 질문하나를 드리자면 대부분의 게시자님께서 말씀하신 알람에 의한 위젯이 아닌 백그라운드에서 실행하는 형태인가요?

    • Favicon of https://croute.me BlogIcon croute 2011.10.27 12:30 신고  댓글주소  수정/삭제

      백그라운드에서 실행되는 형태가 맞습니다.
      알람은 등록하는 순간부터 백그라운드로 들어가구요.

      위젯도 백그라운드에서 실행 하게 되므로,
      사실상 모두 백그라운드에서 실행되는것이죠.

      여기서의 요지는,
      AlarmManager를 이용해서 백그라운드에서 쉬지않고 돌아가는 것이 아닌, 일정 주기(데이터 갱신이 필요하게되는)에 맞춰 데이터를 갱신하는것입니다.