在使用Android Oreo 8.0(API级别26)的设备上,不会调用JobService.onTaskRemoved()
停止工作的代码:
class TaskRemovalWatcherService: JobIntentService() {
...
override fun onTaskRemoved(rootIntent: Intent?) {
//not called on Android Oreo
super.onTaskRemoved(rootIntent);
onAppRemovedFromRecentApps()
}
}
从我需要的最近的应用程序中删除App-Task时
如果AppTasks.size = 2并且从最近的应用程序中删除了1个任务,则不会终止进程,因为第二个AppTask仍在内存中。
更新:
JobIntentService.enqueueWork
然后在JobIntentService.onHandleWork()
JobIntentService.onDestroy()
被叫之后JobService.schedule()
投掷IllegalArgumentException
时schadule工作没有约束。附:检查每个X秒isTaskWasRemoved的想法似乎不是一个好的。
您可以覆盖JobService#onStop()
,然后创建一条消息并将其传递给其他服务,当服务收到该消息时,您可以清除它的工作并将其终止。
START_STICKY
的预期行为可能由于设备制造商的自定义实现或由于在android Oreo中的新实现而发生了变化
您可以使用JobScheduler
在定期间隔后监视服务生命周期。如果服务被销毁,那么您可以在服务实际销毁之前在onDestroy()
方法中执行您的任务。
这将从onTaskremoved()
方法中删除您的依赖项。
请参考以下问题与类似问题onTaskRemoved() not getting called when Home press & kill the app
在您的情况下,解决方法是依靠
onDestroy()
方法:
AlarmManager
几秒后会触发什么,然后再次启动服务。