当设备的液晶显示屏关闭时,服务或处理程序是否也会进入睡眠状态?

does service or handler go to sleep too when device's lcd goes off?

我想开发一个睡眠跟踪应用程序,即使在设备屏幕关闭时也能正常工作。我很好奇 ServiceHandler 是否在设备屏幕关闭时进入睡眠状态。我了解了 activity 的生命周期,所以我认为 Handler 不会起作用,因为当设备的屏幕关闭时活动会进入休眠状态,并且 Handlers 依赖于它的 activity。但是 Service 是一个后台进程,所以我认为它可能会起作用。

所以我希望设备即使在设备屏幕关闭时也能正常运行。你能给我一些建议吗?

屏幕关闭时服务暂停。这样做是为了防止电池耗尽。
在您的情况下,由于您希望服务 运行 的时间更长,因此您可以考虑在此处使用 PowerManager.WakeLock
link.

但您应该记住,使用 WakeLocks 可能会在很大程度上影响设备的电池备份。

如果设备屏幕被锁定,您的应用程序将在一段时间后暂停。 CPU 会一直休眠,直到用户唤醒设备,因此,您的 Service 在设备休眠期间不会执行任何操作。

如果你想在屏幕关闭时执行一些操作,你可以获取一个WakeLockhttp://developer.android.com/reference/android/os/PowerManager.WakeLock.html 但要小心,使用 WakeLock 太多会很快耗尽电池电量。

此外,另一个可能对您有用的 class 是 WakefulBroadcastReceiverhttps://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

它的作用是,它接收一些 Intent 并为您获取一个 WakeLock,以便您可以在 Service 内完成您的工作。没有这个你就不能保证设备会完成工作而不是进入睡眠状态。

does service or handler go to sleep too when device's lcd goes off?

不,您的服务将一直运行进入后台,直到用户强行停止该服务。

如果您希望您的服务一直有效,那么您需要 return START_STICKYonStartCommand()