我正在运行JobIntentService
以在后台执行任务。使用JobIntentService
的原因是为了使用户可以在操作进行时将屏幕最小化,即使Android操作系统破坏了活动,JobIntentService
仍将继续运行,并且如果用户返回可以使用结果进行更新。
但是在某些情况下,假设用户本人关闭了应用程序,那么我也想停止JobIntentService
。
当用户本人关闭应用程序时,是否有任何方法可以通知JobIntentService
。
任何帮助将不胜感激。
编辑:我尝试使用onTaskRemoved
,因为它没有用,但是我的测试设备没有调用它(我确信很多其他设备也不会调用它)。另外,从最近的列表中删除该应用程序后,该服务会自动停止,但是当我再次打开该应用程序时,该服务会再次重新启动。
答案 0 :(得分:3)
当用户从最近任务列表中滑动任务时,Service
被杀死的原因是,当用户从最近任务列表中滑动任务时,Android只是杀死了托管应用程序的OS进程。然后,Android将重启刚刚终止的OS进程中正在运行的所有Service
。
此行为随时间变化,并且在不同版本的Android上也有所不同,并且某些制造商拥有自己的自定义ROM,他们以不同的方式实现此操作。
您无法采取任何措施来确保您的Service
不会被Android杀死并重启。您可以尝试一下,这可能会有所帮助:
将Service
放在单独的OS进程中。为此,请在清单中的android:process=":remote"
标签中添加<service>
。在某些版本的Android上,从最近任务列表中刷任务只会杀死托管活动的OS进程。在这种情况下,这可能会阻止Android杀死您的Service
。
您还说onTaskRemoved()
没有被调用,并且Service
在Android杀死它后不会自动重启。在某些制造商试图积极节省电池电量的设备上会发生这种情况。这在中国设备(小米,中兴等)上很常见,并且某些LG,华为和联想设备也显示了这种行为。在这些设备上,有一个允许在后台运行的应用程序列表(也称为“受保护”应用程序)。您必须将应用程序手动添加到这些设备上的此列表中(或告诉用户他们需要手动将应用程序添加到列表中)。如果您的应用程序位于“受保护的应用程序”列表或“允许在后台运行的应用程序”列表中,那么如果用户从最近任务列表中滑动该任务,或者它确实杀死了它,它应该调用Service
,并且还应该立即自动重新启动onTaskRemoved()
。