【问题标题】:Foreground service is killed in Android 10前台服务在 Android 10 中被杀死
【发布时间】:2020-06-10 13:50:54
【问题描述】:

在 Android 10 中,一些制造商在电池优化设置中提供了新功能(见图)。屏幕关闭一段时间后,我的前台服务被操作系统杀死。

我使用了带有通知的前台服务。当所有设备的屏幕都打开时,此代码运行良好。我在 OnePlus 和 realMe 设备中遇到了这个问题,它们都具有 android 10 操作系统。

我想知道, 有没有办法解决这个问题? 有什么方法可以知道我的设备有这样的设置吗?

感谢您的帮助!

【问题讨论】:

  • 前台服务从未保证它会永远运行。它不太可能在任何时间点被终止,但它仍然可以被终止。
  • 感谢@CommonsWare,有没有办法让设备中存在“智能控制”设置?有什么解决方案可以始终在设备中运行我的服务?
  • "有没有办法让设备中存在“智能控制”设置?" ——据我所知没有。制造商不需要为这类事情提供 API。 “任何解决方案始终在设备中运行我的服务?” - 这是不可能的。同样,甚至可以终止前台服务。使用前台服务并使用START_STICKY,因此操作系统知道如果您被终止,您希望重新启动。之后,这取决于设备制造商,当您的服务无法运行时,您的应用需要应对可能的“停机时间”。
  • 是的,我在 onStartCommand 方法中使用了 START_STICKY,但是当操作系统杀死应用程序时它不会重新启动。谢谢@CommonsWare
  • 您可以在某些系统事件(例如 SCREEN-ON)上使用 JobScheduler 和 BroadcastReceiver 重新启动 ForegroundService,这需要更多权限。

标签: android android-10.0 batterymanager battery-saver


【解决方案1】:

我遇到了同样的问题,在我的情况下,服务在后台获取位置,所以我必须添加foregroundServiceType,它工作正常。 https://developer.android.com/about/versions/10/privacy/changes#app-access-device-location

android:foregroundServiceType="location"

【讨论】:

  • 谢谢@Jordan,但我没有使用任何定位服务作为前台服务。这个android:foregroundServiceType="location"是需要启动前台服务来跟踪位置的。
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多