0

在装有 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 从最近的应用程序中删除时,我需要

  1. 停止一个进程
  2. 完成第二个 AppTask

如果 AppTasks.size = 2 并且从最近的应用程序中删除了 1 个任务,则不会杀死进程,因为第二个 AppTask 仍在内存中。

更新:

  1. 当使用JobIntentService.enqueueWorkthen afterJobIntentService.onHandleWork() JobIntentService.onDestroy()被调用
  2. 当调度作业没有约束时使用JobService.schedule()抛出。IllegalArgumentException

PS检查每X秒isTaskWasRemoved的想法似乎不是一个好主意。

4

2 回答 2

0

START_STICKY由于设备制造商的自定义实施或由于 android Oreo 中的新实施,预期的行为可能已经改变

您可以使用JobScheduler定期间隔后监控服务生命周期。如果服务被销毁,那么您可以onDestroy()在服务实际被销毁之前在方法中执行您的任务。

这将从onTaskremoved()方法中删除您的依赖关系。

请参考下面的问题类似的问题 onTaskRemoved() 当主页按下并杀死应用程序时没有被调用

于 2018-08-30T10:02:39.010 回答
0

您可以覆盖JobService#onStop()然后创建一条消息并将其传递给其他服务,当服务收到该消息时,您可以清理它的工作并将其杀死。

于 2018-08-24T17:42:52.733 回答