2013-01-02 4 views
2

현재 두 개의 섹션으로 구성된 앱이 있으며 작업 부분은 작업 및 작업 완료 시간을 데이터베이스에 추가 한 다음 백그라운드에서 데이터베이스를 폴링하고 작업을 처리하는 서비스를 실행합니다 작업 완료 시간에 도달하면AlarmManager Advice가있는 Android 서비스

현재 내 서비스는 스레드를 확장하는 개인 내부 클래스를 사용하고 있으며 thread.sleep을 사용하여 작업 처리 메서드를 다시 실행하고 있습니다. 이 내부 클래스는 서비스 클래스의 onStartCommand()에서 호출됩니다. thread.sleep는 15 분으로 설정되거나 작업을 처리해야 할 때까지 잠자기 상태로 유지되어야합니다. 이 시점에서 모든 것이 올바르게 작동하지만 몇 가지 문제가 있습니다.

  1. 서비스가 절전 모드 일 때도 작업을 완료해야하는 시점에 따라 항상 변경되는 특정 시간에 실행해야합니다.

  2. 가능한 한 배터리에 거의 영향을주지 않아야합니다.

지금 연구를 통해 내가 지속적으로 특정 작업을했을 때를 기반으로 시간 간격을 변경하는 것이기 때문에 알람 매니저의 사용과 내가 그러나, 대단한 내가 필요에만이 서비스를 시작할 수 있다는 것을 발견 나는 이것이 올바른 행동의 과정이 될지 확신하지 못합니다.

나는 절대적으로 필요한 경우가 아니면 사용하고 싶지 않은 wakelocks에 대해서도 읽었습니다.

저는 앱에서 서비스를 구조화해야하는 방법과 이러한 작업을 처리하는 방법에 대한 조언을 찾고 있습니다.

답변

1

이제 알람 관리자를 사용하여 필요한 경우에만이 서비스를 시작할 수 있다는 것을 알았습니다. 그러나 어떤 작업이 수행되어야 할 때를 기준으로 시간 간격을 지속적으로 변경하기 때문에 좋았습니다. 나는 이것이 올바른 행동 과정이 될지 확신하지 못합니다.

AlarmManager은 분명히 올바른 해결책입니다. 주로 시계 틱 (tick)을 보면서 서비스를 유지하는 것은 당황스럽게 RAM 낭비입니다.

다음 작업이 발생할 때마다 하나의 알람 이벤트 만 있기 때문에 "시간 간격을 지속적으로 변경하지"않습니다. 그것은 단발 경보 일 뿐이며 반복 경보는 아닙니다. 이벤트가 발생하면 작업을 수행하는 것 외에도 다음 이벤트를 예약합니다. 유일한 예는 사용자가 이전에 수행 한 작업보다 빨리 완료 할 작업을 추가하는 경우입니다.이 경우 사용자는 해당 알람 이벤트를 취소하고 일정을 다시 잡아야합니다.

절대적으로 필요한 경우가 아니면 사용하고 싶지 않은 wakelocks도 읽었습니다.

중단없이 주기적으로 작업 할 수 있는지 확인하려는 경우 현재 또는 AlarmManager 구현을 선택할 수 없습니다. 목표는 실제 작업 펄스 중에 WakeLock 만 활성화하고 WakeLock을 해제하고 작업 펄스가 완료되면 서비스를 종료하는 것입니다. 이 패턴 in WakefulIntentService의 구현을 볼 수 있습니다.