服务架构,持续运行与唤醒

时间:2011-10-26 16:41:29

标签: android

我有一个应用程序会频繁唤醒(每分钟一次)在后台执行某些操作。我将使用AlarmManager来安排唤醒。

我正在研究构建Service以构建后台工作的两种不同方法:

  1. 使用setForeground()使服务在前台持续运行。这很有吸引力,因为应用程序状态将在唤醒之间保留在内存中。
  2. 使用stopSelf()在运行后台任务后销毁Service。这将需要在每次唤醒之间保留一些非平凡的对象。
  3. 每种方法的优缺点是什么?持久性有多昂贵?案例2的推荐存储方法是什么?

2 个答案:

答案 0 :(得分:0)

您肯定希望使用选项2并在完成后停止服务。如果你继续运行,你将继续使用系统资源,即电池。做你需要做的事,然后停止服务。还有,你每分钟都在做什么样的醒来?如果您正在进行全面唤醒设备(RTC_WAKEUP),那么您将再次杀死设备电池。

我希望这听起来并不听话,但我曾经听过一个开发者说“不要打android,android会赢”。当你继续使用tyring来将服务设置为前台时,你正在反对机器人试图清理未使用的资源。你应该拥抱android。尽可能异步地做事。那是android的方式:)

答案 1 :(得分:0)

  

我将使用AlarmManager来安排唤醒。

希望不是你选择#1选项。如果您的服务始终在运行,请使用Timer

  

每种方法的优点和缺点是什么?

setForeground()不起作用,并且已经有一段时间了。 startForeground()有效,但需要有效Notification

当我考虑切换到AlarmManagerIntentService时,一分钟的轮询周期正处于关键时刻。话虽这么说,一分钟的轮询周期非常频繁。我强烈建议您使用户可配置,包括“请不要轮询,我会通过用户界面请求更新”选项。

  

这需要在每次唤醒之间保留一些非平凡的对象。

在这两种情况下,您都需要持久保存这些对象。例如,当用户使用任务杀手攻击您的选项#1服务时,如果您没有丢失他们的数据,那就太好了。

  

持久性有多贵?

这并不重要,因为在这两种情况下你都需要保持这些对象。

  

案例2的推荐存储方法是什么?

这不可能在摘要中回答。