首页 > 解决方案 > Activity 和 JobIntentService 生命周期

问题描述

我正在运行一个JobIntentService在后台执行任务。使用的原因JobIntentService是这样用户可以在操作发生时最小化屏幕,即使 Android 操作系统破坏了活动,它JobIntentService仍然会继续运行,如果用户回来,他可以更新结果。

但是我有一种情况,假设用户自己关闭了应用程序,那么我也想停止JobIntentService

JobIntentService当用户自己关闭应用程序时,有什么方法可以通知。

任何帮助将不胜感激。

编辑:我尝试使用onTaskRemoved它是没有用的,因为我的测试设备没有调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近的列表中删除时,服务会自动停止,但当应用程序再次打开时会再次重新启动,这是我不想要的。

标签: androidandroid-activityandroid-serviceandroid-lifecycle

解决方案


当用户从最近的任务列表中滑动任务时,您被杀死的原因是,Service当用户从最近的任务列表中滑动任务时,Android 只会杀死托管应用程序的操作系统进程。然后, Android 将重新启动Service它刚刚杀死的操作系统进程中正在运行的任何程序。

这种行为随着时间的推移而发生变化,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这一点。

您无法做任何事情来确保您Service不会被 Android 杀死和重新启动。你可以试试这个,这可能会有所帮助:

把你Service放在一个单独的操作系统进程中。为此,请添加android:process=":remote"<service>清单中的标记。在某些版本的 Android 上,从最近的任务列表中滑动任务只会杀死托管活动的操作系统进程。在这种情况下,这可能会阻止 Android 杀死您Service

您还说onTaskRemoved()没有调用它,并且Service在 Android 杀死它后不会自动重新启动它。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)上很常见,一些 LG、华为和联想设备也表现出这种行为。在这些设备上,有一个允许在后台运行的应用程序列表(也称为“受保护”应用程序)。您必须在这些设备上手动将您的应用添加到此列表中(或告诉您的用户他们需要手动将您的应用添加到列表中)。如果您的应用程序在“受保护的应用程序”或“允许在后台运行的应用程序”列表中,那么Service如果用户从最近任务列表中滑动该任务,或者它确实杀死了它,Android 现在可能会终止您的应用程序,onTaskRemoved()它也应该立即自动重启Service


推荐阅读