기기에 게시되는 알림을 수신하기 위해 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
내가 뭘 잘못하고 있니?
위치 :
는 그러나 단순히 전화
참조를 깨우지되지 않도록 더 가능성이 보인다? 이전에 (백그라운드 스레드를 사용 중임) 이전에'onNotificationPosted'가 호출 된 것을 말하는 것입니까? 이것은 다소 희박합니다. 어쩌면 디자인에서 뭔가 다른 것을 바꿨을 수도 있습니다. 이 정보에 대한 유일한 논리적 인 가정은 당신이 당신의 응답을 –