我有一个应用程序会频繁唤醒(每分钟一次)在后台执行某些操作。我将使用AlarmManager
来安排唤醒。
我正在研究构建Service
以构建后台工作的两种不同方法:
setForeground()
使服务在前台持续运行。这很有吸引力,因为应用程序状态将在唤醒之间保留在内存中。stopSelf()
在运行后台任务后销毁Service
。这将需要在每次唤醒之间保留一些非平凡的对象。每种方法的优缺点是什么?持久性有多昂贵?案例2的推荐存储方法是什么?
答案 0 :(得分:0)
您肯定希望使用选项2并在完成后停止服务。如果你继续运行,你将继续使用系统资源,即电池。做你需要做的事,然后停止服务。还有,你每分钟都在做什么样的醒来?如果您正在进行全面唤醒设备(RTC_WAKEUP),那么您将再次杀死设备电池。
我希望这听起来并不听话,但我曾经听过一个开发者说“不要打android,android会赢”。当你继续使用tyring来将服务设置为前台时,你正在反对机器人试图清理未使用的资源。你应该拥抱android。尽可能异步地做事。那是android的方式:)
答案 1 :(得分:0)
我将使用AlarmManager来安排唤醒。
希望不是你选择#1选项。如果您的服务始终在运行,请使用Timer
。
每种方法的优点和缺点是什么?
setForeground()
不起作用,并且已经有一段时间了。 startForeground()
有效,但需要有效Notification
。
当我考虑切换到AlarmManager
和IntentService
时,一分钟的轮询周期正处于关键时刻。话虽这么说,一分钟的轮询周期非常频繁。我强烈建议您使用户可配置,包括“请不要轮询,我会通过用户界面请求更新”选项。
这需要在每次唤醒之间保留一些非平凡的对象。
在这两种情况下,您都需要持久保存这些对象。例如,当用户使用任务杀手攻击您的选项#1服务时,如果您没有丢失他们的数据,那就太好了。
持久性有多贵?
这并不重要,因为在这两种情况下你都需要保持这些对象。
案例2的推荐存储方法是什么?
这不可能在摘要中回答。