Stack Overflow 上几乎没有类似的问题,但没有一个解决方案对我有用
问题在于只有 OnePlus 和 MI 等少数设备,一旦用户从最近的应用程序中滑动应用程序,该服务就会被终止。
我读到这些 OEM 使用一些激进的策略来终止服务。我只想知道有什么方法可以让服务保持运行或在它被杀死后立即启动它。
我需要运行一项服务,该服务将在后台连续(24/7)提供位置(此应用程序仅适用于特定人群,因此无需担心电池寿命)。
我试过了:
运行前台服务。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent)
} else {
startService(intent)
}
Run Code Online (Sandbox Code Playgroud)
同样在onCreate以通知开始的服务方法中
@Override
public void onCreate() {
Log.i("Service", "onCreate");
startForeground(NOTIFICATION_ID, getnotification());
}
Run Code Online (Sandbox Code Playgroud)返回START_STICKY在onStartCommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
initLocationClient();
initLocationSyncThread();
return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)重新启动服务onDestroy,onTaskRemoved但他们没有被调用。
绑定服务
经常安排警报管理器并启动服务,但 Play 商店会警告我们的应用程序使用警报管理器过于频繁,这是一种不好的做法。现在有办法使用 workmanager 安排少于 15 分钟的时间,但仍然不能保证在 15 分钟后开始。
那么除了上述选项之外,还有什么方法可以继续运行服务吗?