Я расширяю NotificationListenerService, чтобы перехватывать публикуемые уведомления. к устройству. Это работало отлично, не делая ничего особенного (например, используя wakelocks). Раньше я использовал фоновый поток для выполнения некоторой работы (отправки HTTP-сообщений).
В последнее время я стал больше работать в Службе (около 1 секунды работы ЦП на Nexus 4 при пробуждении) и отключил фоновый поток.
Я заметил, что иногда устройство не просыпается для выполнения работы, делая это через несколько минут или сразу же, когда я снова включаю экран. Я добавил частичную блокировку пробуждения, надеясь, что это решит проблему. К сожалению, он по-прежнему показывает случайное поведение.
Любая идея, как я могу отладить это дальше, и может ли кто-нибудь сказать мне, правильный ли мой подход?
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();
}
Редактировать:
Похоже, wakelock отключается преждевременно. Это заканчивается тем, что эти два сообщения рассылаются спамом в 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
действительно называется ? Вы хотите сказать, что раньше (что вы использовали фоновый поток)onNotificationPosted
вызывался, а теперь нет? Это довольно маловероятно. Возможно, вы изменили что-то еще в своем дизайне. С этой информацией единственное логическое предположение состоит в том, чтоonNotificationPosted
просто не звонят, когда телефон спит, но вам нужно - person Mr_and_Mrs_D   schedule 13.02.2014