我想开发一个睡眠跟踪应用程序,即使设备的屏幕下降也应该可以正常工作。我很好奇当设备屏幕关闭时Service
或Handler
是否会进入睡眠状态。我学习了活动的生命周期,所以我认为Handler
不起作用,因为当设备的屏幕关闭时活动进入睡眠状态,Handlers
依赖于它的活动。但是Service
是一个后台进程,所以我认为它可能有效。
所以即使设备的屏幕关闭,我也希望设备处于活动状态。你能给我一些建议吗?
答案 0 :(得分:2)
如果设备屏幕被锁定,您的应用程序将暂停一段时间。 CPU会一直睡到用户唤醒设备,因此,Service
在设备休眠时不会做任何事情。
如果您想要在屏幕关闭时执行某些操作,您可以获得WakeLock
:http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
但要小心,使用WakeLock
太多会快速耗尽电池。
此外,另一个可能对您有用的课程是WakefulBroadcastReceiver
:https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html
它的作用是,它会收到一些Intent
并为您获取WakeLock
,以便您可以Service
完成工作。如果没有这个,你无法保证设备能完成工作而不能入睡。
答案 1 :(得分:0)
屏幕关闭时服务暂停。这样做是为了防止电池耗尽。
在您的情况下,由于您希望服务运行更长时间,因此可以考虑使用PowerManager.WakeLock
这是{{3} }。
但是你应该记住,使用WakeLocks可能会在很大程度上影响设备的备用电池。
答案 2 :(得分:0)
服务或处理程序是否会在设备的lcd关闭时进入休眠状态?
不,您的服务将一直运行到后台,直到用户强行停止该服务。
如果您希望自己的服务一直存在,那么您需要将START_STICKY返回onStartCommand()