繁体   English   中英

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

[英]onTaskRemoved() doesn't work on Android 8.0 Oreo API level 26

在装有Android Oreo 8.0(API级别26)的JobService.onTaskRemoved()上,未调用JobService.onTaskRemoved()

  • 如何收听这样的事件?

使用的代码停止工作:

class TaskRemovalWatcherService: JobIntentService() {
    ...
    override fun onTaskRemoved(rootIntent: Intent?) {  
    //not called on Android Oreo

        super.onTaskRemoved(rootIntent);   
        onAppRemovedFromRecentApps()
    }
}

从最近的应用程序中删除应用程序任务时,我需要

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

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

更新:

  1. 当使用JobIntentService.enqueueWork则在JobIntentService.onHandleWork() JobIntentService.onDestroy()
  2. 当使用JobService.schedule()作业无约束时,使用JobService.schedule()会抛出IllegalArgumentException

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

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

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

您可以使用JobScheduler定期监控服务生命周期。 如果服务被销毁,则可以在服务真正被销毁之前使用onDestroy()方法执行任务。

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

请按以下问题,并在按下Home键并杀死应用程序时未调用onTaskRemoved()类似问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM