使用睡眠按钮时,调试模式和释放模式下的Android服务行为有所不同,为什么?

时间:2013-03-23 19:18:40

标签: android debugging service sleep

我正在开发一个使用Service as Contdown的应用程序。当用户从活动开始倒计时并且在按下睡眠按钮后活动在后台进行时,我正在使用此服务继续倒计时。计数完成后,服务会显示带铃声的通知。

我使用wait()“来计算”服务中的时间。当我在真实设备上使用应用程序时,会出现奇怪的行为,但是在调试模式下。连接Eclipse调试器时,服务运行良好;当我在没有连接Eclipse调试器的设备上测试应用程序时,服务在倒计时结束时不显示通知,除非睡眠按钮被压制并且监视器被激活 - 然后通知和铃声被激活。

任何人都可以解释导致这种奇怪行为的原因吗?也许问题与唤醒锁或类似构造有关?

2 个答案:

答案 0 :(得分:1)

  

我使用wait()“计算”服务时间。

这是糟糕的编程习惯。即使没有占用RAM,时间也会过去。

  

任何人都可以解释为什么会出现这种奇怪的行为?

设备睡着了。这是保持电池寿命的正常和理想的行为。插入USB电缆后,设备无需入睡,如果您在“开发者选项”中选中了相应的选项,则设备在插入电源时将处于睡眠状态。

  

可能与唤醒锁相关

请不要使用WakeLock让设备保持清醒状态,以便观看时钟。倒数时间结束时,请使用AlarmManager来控制。您可以使用_WAKEUP式警报来安排唤醒设备,而在此时获得控制权的BroadcastReceiver可以“启动通知和铃声”。作为奖励,您可以摆脱您的服务,以便您的应用程序可以在用户的​​设备上更好地表现。

答案 1 :(得分:1)

如果设备进入休眠状态,则不保证

wait()次呼叫等待适当的时间。您应该使用AlarmManager来触发倒数计时器。