0

기기에 게시되는 알림을 수신하기 위해 NotificationListenerService을 연장합니다. 이것은 (wakelocks 사용과 같이) 특별한 일을하지 않고도 완벽하게 작동합니다. 백그라운드 스레드를 사용하여 일부 작업 (HTTP 게시물 수행)을했습니다.NotificationListenerService 및 작업 중 장비 깨우기 유지

요즘에는 서비스에서 더 많은 작업을 시작했으며 (백그라운드에서 Nexus 4에서 약 1 초 CPU 작업) 백그라운드 스레드를 삭제했습니다.

나는 때때로 장치가 작업을하기 위해 잠에서 깨우지 않고, 몇 분 후에 또는 화면을 다시 켰을 때 즉시 깨우지 않는 것을 알아 챘습니다. 나는 그것이 문제를 해결할 수 있기를 희망하는 부분적 깨우기 잠금을 추가했다. 슬프게도 그것은 여전히 ​​무작위적인 행동을 보여줍니다.

어떻게하면 더 이상 이것을 디버깅 할 수 있고 내 접근 방식이 올바른지 누군가가 알 수 있습니까?

PowerManager.WakeLock wakeLock; 

static String wakeLockTag = "NotificationListenerWakeLock"; 

@Override 
public void onNotificationPosted(StatusBarNotification sbn) { 
    acquireWakeLock(); 

    // Do work 

    releaseWakeLock(); 
} 

private void acquireWakeLock() { 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

    if (wakeLock == null) { 
     wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, wakeLockTag); 
    } 

    if (!wakeLock.isHeld()) { 
     wakeLock.acquire(); 
    } 
} 

private void releaseWakeLock() { 
    if (wakeLock != null && wakeLock.isHeld()) 
     wakeLock.release(); 
} 

편집 : 가동 잠금이 조기에 해제됩니다 같은

보인다. 이 메시지는 LogCat에서 약 2 분 동안 스팸으로 발송됩니다.

02-11 20:12:19.557: D/dalvikvm(16564): WAIT_FOR_CONCURRENT_GC blocked 21ms 
02-11 20:12:19.617: D/dalvikvm(16564): GC_CONCURRENT freed 1032K, 10% free 19831K/21820K, paused 1ms+1ms, total 20ms 
02-11 20:12:19.617: D/dalvikvm(16564): WAIT_FOR_CONCURRENT_GC blocked 9ms 
02-11 20:12:19.677: D/dalvikvm(16564): GC_CONCURRENT freed 1075K, 10% free 19794K/21820K, paused 1ms+1ms, total 17ms 

내가 뭘 잘못하고 있니?

+0

위치 :

는 그러나 단순히 전화

참조를 깨우지되지 않도록 더 가능성이 보인다? 이전에 (백그라운드 스레드를 사용 중임) 이전에'onNotificationPosted'가 호출 된 것을 말하는 것입니까? 이것은 다소 희박합니다. 어쩌면 디자인에서 뭔가 다른 것을 바꿨을 수도 있습니다. 이 정보에 대한 유일한 논리적 인 가정은 당신이 당신의 응답을 –

답변

0

는 가비지 컬렉터 (I 추측 모든 실행이 한 번 발생) 당신은 WakefulIntentService 위임을 시도 할 수

에 대해 알고하지 마십시오.과 doWakefulWork() 사이의 틈을 덮는 웨이크 잠금 장치가 있습니다. 스레드에 위임하고 완료시 잠금을 해제합니다. onNotificationPosted이 CPU를 깨운다면 거기에 지혜 (WIS)를 사용해야 할 수도 있습니다. 당신은 참으로 onNotificationPosted`라고 '확인

+0

감사가 필요 asleepbut 전화 인 경우 onNotificationPosted' 단순히 호출되지 않는다 '는 것이다. 나는 내 코드로 더 많은 것을 보았습니다. 나는 wakelock을 제거했고 이상하게도 이제는 더 안정적으로 보인다. 지금까지 지연이 없습니다. 이게 어떻게 가능할까요? – ndsc

+0

@ndsc : 아무 생각도하지 말라. 당신이 확실히 알아야 할 것은'onNotificationPosted'가 전화를 깨우는 것이다. 이렇게하면 코드에서 최소한의 변경을 가한 다음 (git 브랜치에서) 잠금을 다시 추가 한 다음 다시 확인하십시오. 이 모든 위약 효과의 가능성이 있으므로, 너무 조심 :) –