我试图让倒数计时器在我的活动的后台运行,它需要不断运行直到它完成,但不知道如何使它与服务一起工作。我还需要更新我的主要活动的显示
1 回答
呃,并不是所有的服务都 100% 的运行。除非它以 100% 的速度执行,否则没有什么会消耗电池电量。如果您查看 Android 设备的实际电池消耗量,您会发现最大的百分比来自屏幕。下一个来自收音机。运行一个流程的成本非常低。
您可以使用 IntentService 定期触发警报。服务可以向自己发送意图。有一个意图操作来启动服务,一个意图操作来关闭警报。进行第三个动作以重置警报。
要启动服务,请使用 startService(intent) 向 IntentService 发送“启动”意图。这应该触发一个方法,该方法使用“循环”操作创建意图,将意图放入 PendingIntent,并使用 AlarmManager.setRepeating() 安排重复警报。
在您为警报设置的时间间隔之后,AlarmManager 将从 PendingIntent 中取出“循环”意图并将其发送回您的服务。您的服务应通过重建 PendingIntent 并重新启动警报来处理“循环”。这种情况无限期地进行。当警报响起时,您可以在“循环”动作的处理中放置您想做的任何其他事情。
当您希望警报停止时,发送“停止”意图。作为响应,您的服务应该通过重建 PendingIntent 然后调用 AlarmManager.cancel() 来取消警报。
注意:IntentService 的主要入口点是 onHandleIntent()。您从那里调用其他所有内容。当该方法完成时,服务将处于非活动状态,直到它接收到另一个意图。您可以“看到”它的唯一地方是缓存进程。一旦您停止警报,系统最终会发现该服务没有被使用,并进行垃圾收集。
服务是做后台工作的方式。我想你可以运行一些 AsyncTask 或线程,但你仍然想在服务中运行它们,否则你已经将它们链接到在前台运行的东西。如果任务不需要与用户交互,特别是如果它可以与您的活动异步工作,那么使用服务。