Android:前景服务与wakeLock

Dou*_*oug 14 android android-service android-wake-lock

我对Android比较陌生,所以我要问的可能看起来很明显(虽然我已经阅读了所有类似标题的问题,并且进行了广泛的搜索).我需要长时间连续监控加速度计.提出了两种方法:

1)获取部分唤醒锁定,该锁定在整个加速器被监视的时间内保持; 和

2)在前台服务中监控加速度计.

第一种方法似乎使用了大量的电池寿命.第二种方法应该导致服务很少被杀死,但我不确定"很少"意味着什么.应该使用哪种方法,还有哪些方法我应该考虑?

dnk*_*tso 5

持有WakeLock和前景Service并不是真正相关的,不应该比较哪个方向最好.

Android操作系统旨在根据各种因素交换流程.这意味着您的流程可能会在任何时候被Android杀死,它提供了一个框架来帮助您(开发人员)确保您的应用可以在发生这种情况时保存并恢复其状态.

A WakeLock简单地防止CPU休眠,这有助于在手机不使用时节省电量.

现在,两者的结合将帮助您实现您想要的但是用户成本很高.我不希望手机中的应用程序保持CPU持续运行或通知栏中不断显示通知图标(这是前台服务的作用).

请记住,在前台模式下启动服务并不能保证您的应用不会被杀死.它可能仍然会发生,虽然很少.

你想在这里实现什么?为什么要继续监控设备加速度计?也许你应该只Activity在你的应用程序位于前台时监控它.

  • 所有前台服务都保持唤醒锁定.例如,音乐应用程序保持部分唤醒锁定.这是所有前台服务的情况吗? (4认同)

Mel*_*een 2

我有完全相同的需求和问题。我相信解决方案是同时使用部分唤醒锁和前台服务。Android 将尝试不终止持有唤醒锁的后台服务,但可以在需要资源时随意终止它,并可能稍后重新启动它。这对于很多目的来说都很好,但至少就我而言还不够好。将服务置于前台状态是告诉 Android 杀死它是不可接受的方式。是的,在极端情况下它仍然可能发生,但这现在违反了 API 合同,而使用后台服务 Android 可以随意终止它。因此,您应该编码就好像这种情况永远不会发生一样,但只知道这是一个可能但可能罕见的错误。

  • 是否所有前台服务都持有唤醒锁。例如,音乐应用程序持有部分唤醒锁。所有前台服务也是如此吗? (2认同)