0

我有一个正在从服务更新的小部件。当用户随后关闭屏幕时,服务会停止,并且不会在用户唤醒设备时再次开始更新小部件。那么关于我的问题,当用户唤醒设备时,是否有某种方法可以“重新启动”服务?我知道当屏幕锁定时我可以保持服务继续运行,但我认为它会消耗大量电池......我已经谷歌了很多但没有找到任何东西......

提前致谢!

编辑:好吧,这很奇怪!现在它以某种方式自动执行此操作,所以它现在可以工作了!不管怎么说,还是要谢谢你!

编辑2:或者,现在我真的不认为它是停止服务的屏幕锁定,因为当我使用手机时它有时会随机停止而没有崩溃对话框......有人知道我应该如何解决这个问题吗?

4

2 回答 2

1

是的,这是可能的!

当用户关闭屏幕时你必须处理BroadCast Receiverhttp://developer.android.com/reference/android/content/BroadcastReceiver.html

  • 停止服务和服务停止并停止更新小部件的句柄,

  • 当用户唤醒设备时,您必须接收广播开始更新小部件。

我认为节省更多电池是最好的主意。

有关更多信息,请参阅此链接

于 2013-01-12T10:14:30.140 回答
1

对于一个小部件,保持服务一直运行通常没有意义,您通常会定期更新小部件。

做到这一点并提高电池效率的最简单方法是使用AlarmManagersetAlarmInexactRepeating来安排意图:

安排触发时间要求不准确的重复警报;例如,每小时重复一次的警报,但不一定在每小时的开头。这些警报比 setRepeating(int, long, long, PendingIntent) 提供的严格重复更省电,因为系统可以调整警报的相位以使它们同时触发,避免不必要地从睡眠中唤醒设备。

意图应该触发一个 BroadcastReceiver 反过来应该触发你的服务来更新小部件。使用IntentService通常是一个不错的选择。

如果您需要对意图调度进行更多控制,您还可以在服务完成更新小部件时自行设置警报,并提供RTCELAPSED_REALTIME作为警报类型。如果设备处于睡眠状态,这两种类型都不会唤醒设备。如果设备未处于睡眠状态(但已锁定),您将有效地捎带唤醒设备的其他事件。

如果您确实需要在设备解锁后立即更新,则可能需要ACTION_USER_PRESENT广播,但我仍然建议您将其作为安排定期更新的补充。

于 2013-01-12T11:08:24.220 回答