【发布时间】:2014-02-11 19:03:23
【问题描述】:
我正在扩展NotificationListenerService 以捕获发布到设备的通知。在没有做任何特别的事情(比如使用唤醒锁)的情况下,这一直工作得很好。我曾经使用后台线程来做一些工作(做 HTTP 帖子)。
最近我开始在服务中做更多的工作(唤醒时在 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吗?你的意思是说之前(你正在使用后台线程)onNotificationPosted被调用而现在没有被调用?这是相当不可能的。也许您在设计中更改了其他内容。有了这个信息,唯一合乎逻辑的假设是onNotificationPosted在电话处于睡眠状态时根本不会被呼叫,但您需要
标签: android push-notification android-notifications wakelock android-wake-lock