onTaskRemoved()在Android 8.0 Oreo API级别26上不起作用

问题描述 投票:1回答:3

在使用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.enqueueWork然后在JobIntentService.onHandleWork() JobIntentService.onDestroy()被叫之后
  2. 当使用JobService.schedule()投掷IllegalArgumentException时schadule工作没有约束。

附:检查每个X秒isTaskWasRemoved的想法似乎不是一个好的。

android kotlin android-service android-8.0-oreo jobservice
3个回答
0
投票

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


0
投票

START_STICKY的预期行为可能由于设备制造商的自定义实现或由于在android Oreo中的新实现而发生了变化

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

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

请参考以下问题与类似问题onTaskRemoved() not getting called when Home press & kill the app


0
投票

在您的情况下,解决方法是依靠onDestroy()方法:

  1. 重启服务。
  2. 触发AlarmManager几秒后会触发什么,然后再次启动服务。
© www.soinside.com 2019 - 2024. All rights reserved.