我有一个定期运行的服务,使用计时器来调用自身,但是当屏幕关闭时不应该运行。当事件的屏幕被触发时,服务应该运行,但是只有当计时器被触发时才会运行。
现在我仍然连续运行计时器,但是如果屏幕关闭,服务什么都不做。当屏幕打开时,我也可以通过广播接收器运行服务 - 但是每次打开屏幕时都会运行服务,而不是仅在计时器应该运行时才运行。在服务中记录此状态似乎不起作用,因为Android将在执行之间终止应用程序的JVM。
实现此类行为的最干净/最正确的方法是什么?
答案 0 :(得分:0)
因此,您可以监听几个意图,Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON。但是,这些不是明确的接收者,需要明确注册。
请参阅此答案:https://stackoverflow.com/a/9478013/1306452
在所有情况下,它都会涉及长时间运行的服务,以便倾听这些事件。
要记住的一点是,这些意图只会监听设备何时变为非交互式,反之亦然,而不是在屏幕关闭时(请参阅意图中的描述)。
实现此行为的最佳方式是侦听这些意图何时使用长期服务,以START_STICKY开头以帮助确保服务正在运行。该服务可以为SCREEN_ON和OFF事件注册一个接收器,当它收到这些事件时,如果没有经过定时器则不执行任何操作,如果没有,则继续执行。
这对你的电池寿命来说不会很好,而且你所做的事情听起来并不像是一个令人愉悦的用户体验。您可能还想退后一步,看看是否有另一种绕过这个障碍的方式(我的2美分)。