2011-10-26 33 views
0

我有一个应用程序,在频繁的间隔(每分钟一次)醒来后台做一些东西。我将使用AlarmManager安排唤醒。服务体系结构,连续运行与唤醒

我在看一个结构化Service做后台工作的两种不同的方式:

  1. 保持服务的前景与setForeground()连续运行。这很有吸引力,因为应用程序状态将在唤醒之间保留在内存中。
  2. 使用stopSelf()在完成运行后台任务后销毁Service。这将需要在每次唤醒之间保持一些不重要的对象。

每种方法的优缺点是什么?持久性代价如何?案例2存储的推荐方法是什么?

回答

0

我将使用AlarmManager来安排唤醒。

希望如果你选择#1的话。无论如何,如果您的服务将始终运行,请使用Timer

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

setForeground()不工作,也没有很长一段时间。 startForeground()的作品,但它需要一个活跃的Notification

当我考虑切换到AlarmManagerIntentService时,一个一分钟的轮询周期就在这个尖端。话虽如此,一分钟的轮询周期非常频繁。我强烈建议您将此用户配置为可配置,包括“请勿轮询,我会通过用户界面请求更新”选项。

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

你需要在这两种情况下保持这些对象。例如,当用户使用任务杀手攻击您的选项#1服务时,如果您没有丢失数据,那将会很好。

持久性代价如何?

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

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

这是不可能在摘要中回答的。

0

您一定要使用选项2,并在完成后停止服务。如果你保持它运行你将继续使用系统资源,即电池。做你需要做的,然后停止服务。另外,你每分钟都在做些什么?如果你正在做一个完整的设备唤醒(RTC_WAKEUP),你会再次杀死设备的电池。

我希望这听起来不那么傲慢,但我曾经听过一个开发人员说“不要打android,android会赢”。当你不断地将你的服务设置为前台时,你会对抗机器人试图清理未被使用的资源。你应该拥抱android。尽可能异步地做事情。这是Android的方式:)

+0

感谢您的回复。记住这是一个很好的引用。 – Michael