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

일정관리 앱에서 알람 관련하여 Service가 나은가요? AlarmManager 등록이 나은가요?

0 추천
안녕하세요.

일정관리 앱을 제작중에 있습니다.

제작은 거의 완료 되었는데 한가지 궁금한 점이 생겼습니다.

현재 저는 일정 관련하여 SQLite에 저장하는 동시에 알람 매니저를 사용하여

알람을 셋팅하여 놓습니다.

이렇게 하니 고민이 생겼습니다.

1. 일정이 2-3달 뒤라면 알람매니저가 3달동안 메모리상에 있다??

2. 일정이 몇 백개라면 몇 백개가 동시에 메모리 상에 있다??

3. 재 부팅시 모두 날아가 버린다. 따라서 부트리시버에서 부팅시점 날짜로

   SQLite에서 다 꺼내와 모두 알람 매니저로 등록해 놓는다.

그래서 주위에 물어본 결과..

차라리 서비스를 돌리라고 하네요.

서비스를 돌려 1분에 한번씩 SQLite에서 알람을 알릴 일정이 있나 없나 살펴 보다가 일정이 있으면 바로 알람 매니저를 이용해 알람을 알린다.

근데 이렇게 하면 문제가 24시간 동안 계속 백그라운드로 서비스 돌면서 1분에 한번씩 SQLite에 쿼리 날리면 사용자에게 민폐는 아닌가 싶네요.

일정이 많으면 괜찮을꺼 같은데.. 흠..

아무튼.. 저는 아직 초보라 어느게 더 퍼포먼스 측면에서 좋을지 전혀 감을 못 잡겠습니다.

보통 일정 관리 앱은 어떠한 방식으로 구현이 되나요??

고수님들의 의견 부탁드립니다.^^

 

 

간단한 알람 같은 경우 알람매니저로 등록하면 될 것 같
치즈그라탕 (140 포인트) 님이 2013년 5월 24일 질문

2개의 답변

0 추천
일정을 입력할 때 마다

디비의 최신 알람을 프리퍼런스로 저장해서

서비스 돌리면

서비스 돌때마다 디비를 검색하지 않아도 될듯하네요.
아나콘다v (4,670 포인트) 님이 2013년 5월 24일 답변
정확하게 이해가 안되서 재 질문 드립니다.^^;
사용자가 알람을 등록할때마다 값을 비교해서 제일 최신 알람을 프리퍼런스에 저장해 놓는 다는 말씀이신가요?? 서비스는 24시간 계속 돌고 있는 상태인가요?? 추가적인 최신 알람을 프리퍼런스에 넣는 작업은 어디서 하는건가요??
이해가 느려 죄송합니다.ㅠ
0 추천
저도 아직 초보라 정답인지는 잘 모르겠네요,

제가 스케쥴 앱 해봤던 경험으로 답변 드리자면,

Service 와 AlarmManager 를 혼용하여 사용하시길 추천합니다.

 

단, Service를 1분에 한번씩 돌리는건 좋은 방법이 아니구요

 

일정을 등록할 때 당일로 등록된 경우는 AlarmManager에 바로

등록하셔도 되구, DB에 정보를 등록 후 그날 알람이 필요한 경우에만

알람 메니저에 등록되록 설정하시면 됩니다.

 

마찬가지로 내일 혹은 그 이후에 있을 일정 또한 DB에 넣어 두셨다가

하루에 한번 정도 (저는 00시 경에 동작하도록 했었습니다.) 서비스가

동작하여 DB 검색 후 조건에 일치할 경우 AlarmManager에 이벤트 등록하시면

될 것 같습니다.

 

단순히 한번의 이벤트인 경우와 반복되는 일정일 경우에 대한

쿼리 조건을 잘 생각하셔서 짜신다면 무난하게 사용 가능하실 겁니다.
비뢰광 (7,400 포인트) 님이 2013년 5월 24일 답변
좋은 답변 너무 감사합니다.^^
한가지 재 질문 드립니다.
그러면 혹시 하루에 한번 실행되는 서비스의 경우 그것도 알람 매니저로 셋팅해서 일정 시간이 되면 서비서를 실행시키나요? 아니면 서비스는 계속 돌아가고 있고, 00시경에 thread를 동작 시키나요?
답변 부탁드려요
하루에 한번 서비스가 실행되면서 AlarmManager에 등록할 때
동작할 리시버 설정해 주시면 알람 시간에 리시버가 호출되면서
원하시는 이벤트 처리하시면 됩니다.
제 경우 노티 띄우는 처리만 하였습니다. 일정만 알려주면 되는
기획이었기 때문에.. ㅎ
아.. 제가 질문을 약간 오해했네요..

서비스는 실행하고 서비스를 종료하던지 앱 관리자 단에서 강제 종료하지 않는이 상 계속 상주 합니다. 따라서 서비스를 알람 매니저로 재실행 필요가 없습니다. 00시를 말씀드린건 서비스에 설정하는 필터 속성 중에
<action android:name="android.intent.action.DATE_CHANGED"/>를 사용하기 때문입니다.
친절한 답변 너무 감사드립니다.^^
그런데 제가 구글을 써치하다 보니...
DATE_CHANGED는 사용자가 수동으로 날짜를 바꿀때 이벤트가 발생된다고 하네요??ㅠ
날짜가 바뀐다고 호출되는게 아니라고 하는데..
직접 실험해볼려면 하루를 기다려야 하나요ㅠ
음.. 글쎄요...
일단 저는 스케쥴 앱 테스트 할 때 정상 동작했었는데..
(3~4일 이후 알림이나 요일 반복 알림 등..)
확인이 필요한 듯합니다.

프로그램에서 테스트는 필수니까요.. ㅎ
그리고 사용자가 수동으로 날짜를 바꿀 때 뿐 아니라 시스템 상에서 자동적으로 날짜 변경되더라도 호출이 되는 걸로 알고 있습니다.

일단 ACTION 종류들 중에서 필요한거 사용하시면 될 듯 합니다.
http://netrance.blog.me/110163492822
넵 감사합니다.^^
좀 더 연구해보도록 하겠습니다. :)
...