2011-05-04 1 views
0

CWAC Advanced Android 책의 AlarmManager 섹션을 정말 좋아합니다. 잠자기 후 깨우기 기능이 없어서 앱이 죽는 것이 걱정됩니다. 여기 내가 걱정하는 것이있다. 내 걱정은 이성적입니까?doWakefulWork가 다른 서비스를 시작하면 어떻게 될까요?

아래 코드를 참조하십시오. doWakefulWork가 다른 서비스를 시작해야한다면? 이 경우, 다른 서비스는 WakeLock을 실행 상태로 유지해야하지만 서비스 시작과 wakelock이 해제 될 수있는 onHandleIntent 사이의 시간 차이가 있습니다!

@Override 
final protected void onHandleIntent(Intent intent) { 
try { 
    doWakefulWork(intent) 
    } 
finally { 
    getLock(this).release(); 
} 
} 

내가는 대답은 : 다른 서비스도 WakefulIntentService 경우가 아니라면 동일한 스레드에서 실행해야합니다 doWakefulWork, 그것은 다른 스레드 또는 서비스를 시작할 수 없습니다.

맞습니까?

+0

왜 처음에는 두 가지 서비스가 있습니까? – CommonsWare

+0

한 가지 경우에 doWakefulWork는 활동을 시작합니다. 활동을 시작하면 잠에서 깨우기 잠금 장치가 필요합니까? 다른 경우 기존 코드가 있습니다. 네가 제안한대로 개조 할 수있어. – gregm

+0

활동을 시작하면 사용자가 먼저 활동과 상호 작용하지 않으면 장치가 잠든 것입니다. 그 당시 사용자가 기기 근처에 있는지 전혀 알지 못하기 때문에 사용자를 기다리면서 기기를 깨우지 않으려 고 강력히 권장합니다. 나는 두 가지 서비스를 통합하는 것이 장거리를위한 당신의 삶을 단순화 할 수 있다고 생각하지만 그것은 단지 추측 일뿐입니다. – CommonsWare

답변

1

다른 서비스가 WakeLock을 보유하려면 예 : WakefulIntentService 또는 WakeLock을 취득해야합니다. 의도를 보내고 다른 서비스가 실제로 잠금을 획득 할 때까지 시간이 걱정된다면 어떤 유형의 차단 메커니즘을 구현해야합니다 (즉, doWakefulWork 메소드가 다른 서비스가 시작될 때까지 차단하고 잠금)

+1

block-the-method 접근법은 다소 칙칙하지만 작동 할 수 있습니다. 나는 다른 서비스가 그 자체가'WakefulIntentService'가 아니라면 깨어있는 패턴을 구현할 뿐이다. 'WakefulIntentService' 코드는 꽤 작아서 앞서 언급 한 책에서 주로 설명됩니다. – CommonsWare