2012-06-25 7 views
3

나는 배터리 수준 모니터링을위한 수많은 출처를 찾았지만 어느 누구도 고정 된 시간 간격으로이를 확인하는 방법을 설명하지 않았습니다. n 초마다 배터리를 확인하려고한다고 가정합니다. 가장 효율적인 방법은 무엇입니까?n 초마다 Android 배터리 측정 항목 검색 [효율적으로]

현재 BroadcastReceiver를 만들고 필터를 사용하여 서비스에 등록합니다. 그런 다음 ScheduledExecutor를 사용하여 배터리의 정보를 가져옵니다. 무슨 일이 벌어지고 있는지 잘 이해한다면, BroadcastReceiver는 일정 시간 안에 확인하고 싶지 않고 오히려 역동적 인 속도로 모든 방송을 수신합니다.

BroadcastReceiver를 만들면 현재 정보가있는 "초기"메시지가 수신되는 것으로 나타납니다. 수시로 리시버 객체를 생성하고,이 초기 메시지를받은 다음, 그것을 체크하고 싶을 때마다 파기하는 것이 더 효율적일까요? 아니면 내가 생각하지 못한 다른 방식이 있습니까? 아무도 관심이 있다면이 경우, 배터리를 모니터링하는 데

출처 :

+0

ACTION_BATTERY_CHANGED 방송을 청취하는 전체 시점에서 배터리 충전 수준 ** 변경 **에 대한 알림 만 수신되지 않습니까? 요금이 여전히 동일하다는 것을 2 분마다 알아내는 데 중요한 점은 무엇입니까? – tiguchi

+0

예, 맞습니다. 배터리를 5 분마다 확인하고 BroadcastReceiver가 매분마다 무언가를 받고 있다면 5 분마다 확인하는 것이 좋지 않습니까? 이 숫자는 임의적이지만, BroadcastReceiver가 지속적으로 청취 할 때 더 많은 메시지를 보낼 수 있다는 것이 핵심입니다. 내 구체적인 구현에서 더 좋지 않더라도, 더 좋은 방법을 확인할 수 있는지 궁금합니다. –

답변

2

생각에는 내가 배터리를 확인하려면 n 초마다. 가장 효율적인 방법은 무엇입니까?

n이 수백 또는 수천 초 단위로 측정되지 않으면 배터리 수명이 가장 많이 걸릴 수 있습니다. 귀하의 의견을 감안할 때, 나는 당신이 정말로 "매 n 분"을 의미한다고 가정 할 것입니다.

단계 # 1 : (A _WAKEUP 알람 유형하지 바람직)를 IntentService 모든 n분를 호출하는 AlarmManager 일정을 설정합니다.

단계 2 : 그 IntentService에서는 nullBroadcastReceiverACTION_BATTERY_CHANGED 위해 인 IntentFilterregisterReceiver() 전화. 반환 값은이 이벤트에 대해 마지막으로 Intent 브로드 캐스트가됩니다.

3 단계 : 데이터로 무엇인가하십시오.

+0

부정확 한 반복 알람을 사용하여 시스템이 어쨌든 깨어나는 다른 활동과 활동을 결합 할 수 있습니다. – Sparky

+0

좋습니다. registerReceiver에 대한 설명서를 읽은 후에 말이됩니다. 감사! 그냥 확인 : 올바른 새 알람 관리자를 만드는 대신 이미 가지고있는 ScheduledExecutorService의 run 메서드에이 메서드를 추가하는 것이 동일할까요? (내가 충분히 명성을 얻었을 때 upvote를 기억할 것이다! - 나는 이것을 생각 나게하기 위해 여기에두고있다.) –

+0

백그라운드에서 실행되는 스레드를 스핀 업하는 것이 더 효율적이지 않고 대부분의 시간을 잠자 게 보내고 싶습니까? 타이머를 관리하고 앱 코드를 다시 호출하는 것보다 스레드가 주기적으로 일어나서 배터리 수명을 확인하는 데 드는 오버 헤드가 적은 것 같습니다. – aroth