2012-09-18 5 views
6

저는 2D 바코드를 스캔 한 다음, 더 긴 작업이 수행되는 IntentService에 각 바코드를 제출하는 작은 유틸리티 앱을 개발 중입니다.여러 개의 Wake Lock을 보유 할 수 있습니까?

활동이 표시 될 때 바코드가 서비스에서 처리 될 때까지 장치가 절전 모드로 들어 가지 않도록해야합니다. 서비스가 처리를 끝내면 자체적으로 중지되지만 작업은 여전히 ​​표시되어야합니다.

활동주기 동안 SCREEN_DIM_WAKE_LOCK WakeLock을 보유하고 싶지만이 유형으로 CPU가 잠자기되는 것을 방지하지 못하므로 새로운 2D 코드를 스캔 할 때 활동에서 PARTIAL_WAKE_LOCK을 획득해야합니다 처리 된 후 의도 서비스에서 해제합니다.

SCREEN_DIM_WAKE_LOCK의 목적은 장치를 깨우고 새 바코드를 읽을 수 있도록 몇 초마다 전원 버튼을 누르는 불편 함을 피하기위한 것입니다. 사용자는 많은 수의 코드를 하나씩 읽어야하며 사용자 상호 작용이없는 짧은 간격에도 활동이 있어야합니다.

Android에서 애플리케이션이 제어 할 수없는 여러 조건으로 인해 앱이 상단에 있거나 폐쇄되지 않았거나 포어라운드 된 것을 100 % 보증하지는 않지만 가능한 한 멀리 가고 싶습니다.

그래서 여러 개의 WakeLock을 가질 수 있습니까? 활동과 봉사 모두에서 그들이 어디서 접근 할 수 있다고 선언 될 수 있습니까? (Singleton, extends application?)

답변

9

여러 개의 WakeLock을 보유 할 수 있습니다. 사실 그것은 화면이 꺼져있는 동시에 여러 응용 프로그램이 동시에 동기화 될 때 항상 수행됩니다. (화면이 잠겨있는 동시에 Gmail과 Facebook 응용 프로그램이 동시에 동기화된다고 상상해보십시오. 서로 다른 WakeLock을 가지고 있을지 모릅니다.) WakeLock의 유형이 다를 수도 있고 다를 수도 있습니다.

Android는 모든 사람들이 기대치를 충족시킨다. (다른 말로하면 배터리 소모가 최대가된다.)

제 의견으로는 SCREEN_DIM_WAKE_LOCK이 필요하다는 사실을 과장 생각하고 있습니다. 실수로 많은 배터리가 소모 될 수 있지만 잘못된 것일 수 있습니다. 유스 케이스에 따라 다르다.

간단한 대답은 YES입니다. 여러 WakeLocks를 보유 할 수 있으며 Android는 예상대로 작동합니다. 명심해야 할 점은 두 개의 Wakelocks를 모두 올바르게 해제한다는 것입니다.

화면 맨 위로 올라가는 문제에서 일시 중지 상태 (다른 활동이 위에 있거나 의도적으로 전원 버튼을 누르면)로 들어가면 내 활동의 WakeLock을 해제해야한다고 생각합니다. 이 시점에서 사용자는 다른 앱과 상호 작용하고 있으므로 앱을 존중하고 자신의 행동을 제어하게해야합니다. 완료 될 때까지 서비스에서 부분적인 잠김 잠금을 포기할 필요가 없습니다.

희망이 도움이됩니다.

+0

+1. 하지만 대화 상자를 밀 때 잠자기하고 싶지 않기 때문에'onStop'에서 WakeLock 화면을 공개하고 있습니다. –

+0

대화 상자가 앞에 오면 사용자가 대화 상자에 응답해야하기 때문에 더 이상 바코드를 스캔하지 않는다고 가정합니다. 사용이 응답하지 않으면 시스템을 잠자기 상태로 만들지 않습니까? 대화 시간에? – Madushan

+0

네, 잘 시간은 수면 타이머가 걸리는 시간에 따라 다릅니다. 3 초가 걸리면 전원 버튼을 누르는 것이 귀찮습니다. 시간이 오래 걸린다해도 괜찮습니다. 작업량에 따라 화면 희미한 자물쇠를 버릴 수도 있습니다. –

관련 문제