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

Android 服务架构,持续运行与唤醒,android,Android,我有一个应用程序,它会频繁地(每分钟一次)醒来,在后台做一些事情。我将使用AlarmManager来安排唤醒 我正在研究两种不同的方式来构建服务,以完成后台工作: 使用setForeground()保持服务在前台持续运行。这很有吸引力,因为在两次唤醒之间,应用程序状态将保留在内存中 在运行完后台任务后,使用stopSelf()销毁服务。这将需要在每次唤醒之间持久化一些非平凡的对象 每种方法的优缺点是什么?坚持的代价有多大?对于案例2,推荐的存储方法是什么?您肯定希望使用选项2并在完成后停止服务。

我有一个应用程序,它会频繁地(每分钟一次)醒来,在后台做一些事情。我将使用
AlarmManager
来安排唤醒

我正在研究两种不同的方式来构建
服务
,以完成后台工作:

  • 使用
    setForeground()
    保持服务在前台持续运行。这很有吸引力,因为在两次唤醒之间,应用程序状态将保留在内存中
  • 在运行完后台任务后,使用
    stopSelf()
    销毁
    服务。这将需要在每次唤醒之间持久化一些非平凡的对象

  • 每种方法的优缺点是什么?坚持的代价有多大?对于案例2,推荐的存储方法是什么?

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

    我希望这听起来不那么傲慢,但我曾经听到一个开发者说“不要和安卓抗争,安卓会赢”。当你不断地将你的服务设置为前台时,你就是在与机器人清理未使用资源的尝试作斗争。你应该接受android。尽可能异步地做事情。这就是android的方式:)

    我将使用AlarmManager来安排唤醒

    如果你选择1号选项,希望不会。如果您的服务将一直运行,只需使用
    计时器

    每种方法的优缺点是什么

    setForeground()
    不起作用,而且已经有一段时间不起作用了
    startForeground()
    可以工作,但它需要一个活动的
    通知

    一分钟轮询周期是当我考虑切换到<代码> AlARMARCHEM/<代码>和<代码>智能服务< /代码>的时候。这就是说,一分钟的投票周期非常频繁。我强烈建议您配置此用户,包括“请不要投票,我将通过UI请求更新”选项

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

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

    坚持的代价有多大

    这其实并不重要,因为在这两种情况下都需要持久化这些对象

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

    这是不可能抽象地回答的