2011-07-02 2 views
12

지연 (즉, 24 시간) 설정과 정확한 시간 (자정) 이외에도 AlarmManagerScheduledExecutorService을 사용하여 주기적으로 작업을 실행하는 것의 차이점은 무엇입니까?AlarmManager와 ScheduledExecutorService의 차이점

필자의 경우 매일 밤 새 데이터를 확인하고 새 데이터가 있으면 새로운 알림을 작성하기 위해 약간의 코드를 실행해야합니다.

감사합니다.

답변

33

ScheduledExecutorService이 신청 프로세스에서 실행됩니다. 응용 프로그램 프로세스가 종료되면 예약 된 작업이 실행되지 않습니다. 따라서 Service에 대한 필요성 (활동이 활동 수명주기의 일부를 넘기 때문에).

AlarmManager은 항상 실행되는 중요한 시스템 서비스입니다. 그리고 귀하의 신청서가 무언가 계획되어 살해당한 경우, AlarmManager은 (PendingIntent을 통해) 신청서를 다시 시작할 수 있습니다.

그리고 여기서 언급 한 사람 중 가장 큰 차이점은 AlarmManagerWakeLock과 전원 관리에 대해 알고 있다는 것입니다. 즉, AlarmManager은 예약 된 작업을 실행하기 위해 지정된 시간에 Android 기기를 깨울 수 있습니다. ScheduledExecutorService은 전원 관리에 대해 아무것도 모르고 있으며 기기가 딥 슬립 상태에 있지 않을 때만 작업을 시작합니다 (즉, 단순히 시간을 놓칠 수 있습니다).

+0

장치가 깊은 잠에있을 때 작동하는 다른 장치가 있습니까? 처리기, 실행 가능 스레드를 시도했지만 딥 슬립 모드에서 작동하지 않습니다. – DAC84

5

저는 ScheduledExecutorService이 (는) 당신의 프로세스와 관련이 있으며 프로세스가 종료 될 경우를 대비해 작동하지 않을 것이라고 생각합니다. 반대로 AlarmManager은 OS에서 관리하므로 응용 프로그램이 실행되지 않아도 작동합니다.

10

ScheduledExecutorService은 항상 실행중인 일부 구성 요소 (예 : Service)가있는 경우에만 작동합니다. 따라서 구성 요소가 다른 이유로 메모리에 저장되어 사용자에게 가치를 부여하는 경우에만 사용해야합니다. 구성 요소가 시계 틱을보기 위해 메모리에만있는 것은 낭비적이고 사용자가 작업 킬러 등으로 개발자를 공격하는 이유 중 하나입니다.

AlarmManager은 OS 제공 시스템 서비스입니다. 시간이 흐를 때 구성 요소를 시작할 수 있습니다. 따라서 구성 요소를 실행할 필요가 없습니다.

저는 매일 밤 새 데이터를 확인하고 새 데이터가있는 경우 새 알림을 만들기 위해 약간의 코드를 실행해야합니다.

AlarmManager에 대한 명확한 시나리오입니다.