2011-09-30 5 views
0

나는 서비스의 onStartCommand에 가동 잠금을 inicialize : 심지어 잠금 화면으로 언제든지 흔들림 이벤트를 인식해야하기 때문에Wakelock을 자동으로 해제 할 수 있습니까?

wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wl.acquire(); 

나는 가동 잠금이 활성화합니다.

@Override 
public void onDestroy() { 
    mSensorManager.unregisterListener(mSensorListener); 
    if(wl.isHeld()) 
     wl.release(); 
    super.onDestroy(); 
} 

오전 내가 잘못 아무것도 : 서비스가 오랜 시간 동안 상태이며 나는 그것을 파괴하면 파괴 방법에 가동 잠금을 acessing 때

, 그것은 오류를 준다? wakockock은 자동으로 해제됩니다.

더 정확한 방법이 있습니까?

답변

0

어떤 오류가 발생합니까?

서비스가 엄격히 "원 샷"이 아니라고 가정하면 동일한 서비스 인스턴스에서 onStartCommand를 여러 번 호출해야합니다. 따라서 많은 wakelocks가 생성됩니다. 그러지 마.

WakeLock의 생성을 Service#onCreate()으로 이동하는 것으로 시작하십시오. 실제로는 하나만 필요합니다. "수동으로"서비스를 종료 할 때까지 장치를 깨우기를 원한다면 WakeLock#aquire()Service#onCreate()에 두 번 이상 호출 할 필요가 없습니다.

당신은 (그것을 참조 기본적으로 계산되기 때문에) 당신이 그것을 호출 한 횟수를 추적 할 필요 Service#onStartCommand()WakeLock#aquire() 유지를 주장하는 경우 - 또는 WakeLock에 대한 참조 카운트의 차례를 당신이 그것을 만들 때 WakeLock#setReferenceCounted(false)으로 전화하십시오.

+0

서비스 # onCreate()로 변경되었습니다. 오류가 다시 발생하면 나중에 무엇이 있는지 알려 드리겠습니다. –

+0

감사합니다. m8,이 작업 :) –

관련 문제