2013-12-16 5 views
2

여러 스레드에서 서비스 구성 요소 (활동에 의해 시작되고 항상 실행 됨)가 포함 된 단일 프로세스 앱이 있습니다. 배터리를 절약하기 위해 앱을 7 초 동안 반복적으로 정지 (깊은 잠) 한 다음 매우 짧은 시간 동안 가속도계를 시작해야합니다 (20 개의 샘플을 수집 한 후 가속도계가 중지됨). 2.3 이상의 모든 안드로이드 플랫폼에서 실행되어야합니다.배터리 절약 및 AlarmManager 성능

첫 번째 방법은 가속도계가 중지 된 후 Handler 기반 sendMessageDelayed 메서드 (지연 = 7 초)를 사용하여 부분 웨이크 잠금을 획득하지 않고 서비스 구성 요소에 타이머를 구현하는 것이 었습니다. 그러나 타이머가 전화가 잠들지 않을 때만 타이머가 카운트하기 때문에 이것이 좋은 접근 방법이 아니라고 봅니다. (틀렸거나이 문제에 대한 해결책이 있다면 여기에서 제발 정정하십시오).

내 두 번째 방법은 첫 번째 방법과 동일하지만 sendmesssageDelayed를 호출하기 전에 부분적인 잠김 잠금을 획득하는 방법과 동일합니다. 그것은 잘 작동하지만 배터리 소모가 너무 많습니다. 그래서 여기

몇 가지 질문 :

  1. 내가 알람 관리기가 방송 매 7 초 화재로 사용할 수 있습니까? AlarmManager가 7 초 안에 너무 짧으면 내부적으로 상당한 시간 동안 부분적인 wakockock을 얻게되므로 걱정이됩니다. 누군가 Wakelock이 AlarmManager에 의해 획득 될 수있는 최대 시간 동안 성능 분석을 수행했는지 아니면 다른 접근법이 있는지 궁금합니다. 나는 AlarmManager가 효과적인 해결책이라고 말한 다른 게시물을 읽었지만, 오랜 기간 동안 특히 유용합니다.

  2. AlarmManager를 사용해야하는 경우 서비스 구성 요소의 공개 정적 필드로 유지되는 wakelock 객체를 사용하여 브로드 캐스트 수신기에서 부분 웨이크 록을 얻을 수 있습니까 (앱의 다른 구성 요소에서도 쉽게 액세스 할 수 있습니다)?

  3. 브로드 캐스트 수신기에서 처리기 기반 개체를 액세스하고 사용하여 서비스 브로드 캐스트에 경보 브로드 캐스트를 수신했음을 알리는 데 문제가 있습니까? (핸들러 객체는 서비스 구성 요소의 정적 공용 필드로 유지되므로 응용 프로그램의 다른 구성 요소에서 쉽게 액세스 할 수 있습니다. 당신은 항상 알람 관리기를 사용할 필요가 없습니다 실행중인 서비스를 사용하는 경우

당신의 도움이

+0

해결 되었습니까? 그렇다면 답변을 작성해주십시오. – ransh

답변

0

주셔서 대단히 감사합니다. 처리기가 더 쉽습니다. 7 초마다 많은 시간이 걸릴 것입니다. 내 말은, 당신이 "배터리 절약"을 언급한다면? 서비스를 계속 운영하는 것은 비용이 많이 들고 서비스 자체가 아니라 비싼 것입니다.

+0

의견을 보내 주셔서 감사합니다. 나는 AlarmManager가 필요하다고 생각하고 있었다. 서비스를 7 초 동안 실행하지 않고 잠깐 깨운 다음 ​​부분적 깨우기 잠금으로 시작하기를 원하기 때문이다. 불행히도 나는 가속도계가 좋은 결과를 내지 못하기 때문에 부분적인 속도계가 필요하다. – user3107977

관련 문제