Activity 和 JobIntentService 生命周期
Activity and JobIntentService Lifecycle
我运行一个JobIntentService
在后台执行任务。使用 JobIntentService
的原因是这样用户可以在操作发生时最小化屏幕,即使 Android OS 破坏了 activity JobIntentService
仍将保留 运行,如果用户回来,他可以更新结果。
但我有一个案例,假设用户自己关闭了应用程序,那么我也想停止 JobIntentService
。
有什么方法可以在用户自己关闭应用时通知JobIntentService
任何帮助将不胜感激。
编辑:我尝试使用 onTaskRemoved
是没有用的,因为我的测试设备不调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近的列表中删除时,服务会自动停止,但当应用程序再次打开时,服务会再次重新启动,这是我不想要的。
当用户从最近的任务列表中滑动任务时,您的 Service
被终止的原因是 Android 只是在用户滑动时终止托管应用程序的 OS 进程最近任务列表中的任务。 Android 然后将重新启动 运行 正在它刚刚终止的 OS 进程中的任何 Service
。
这种行为随着时间的推移而改变,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这种行为。
您无能为力确保您的 Service
不会被 Android 杀死和重启。你可以试试这个,这可能会有所帮助:
将您的 Service
放在单独的 OS 进程中。为此,请将 android:process=":remote"
添加到清单中的 <service>
标记。在某些版本的 Android 上,从最近任务列表中删除任务只会终止托管活动的 OS 进程。在这种情况下,这可能会阻止 Android 杀死你的 Service
。
你还说 onTaskRemoved()
没有被调用,你的 Service
在 Android 结束后不会自动重启。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)和一些 LG、华为和联想设备上也很常见。在这些设备上有一个允许 运行 在后台运行的应用程序列表(也称为 "protected" 应用程序)。您必须在这些设备上手动将您的应用添加到此列表(或告诉您的用户他们需要手动将您的应用添加到列表)。如果您的应用在 "protected apps" 或 "apps allowed to run in the background" 列表中,那么如果用户从最近任务列表中滑动任务,Android 现在可能会终止您的 Service
,或者如果它确实杀死了它,它应该调用 onTaskRemoved()
并且它还应该立即自动重启 Service
。
我运行一个JobIntentService
在后台执行任务。使用 JobIntentService
的原因是这样用户可以在操作发生时最小化屏幕,即使 Android OS 破坏了 activity JobIntentService
仍将保留 运行,如果用户回来,他可以更新结果。
但我有一个案例,假设用户自己关闭了应用程序,那么我也想停止 JobIntentService
。
有什么方法可以在用户自己关闭应用时通知JobIntentService
任何帮助将不胜感激。
编辑:我尝试使用 onTaskRemoved
是没有用的,因为我的测试设备不调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近的列表中删除时,服务会自动停止,但当应用程序再次打开时,服务会再次重新启动,这是我不想要的。
当用户从最近的任务列表中滑动任务时,您的 Service
被终止的原因是 Android 只是在用户滑动时终止托管应用程序的 OS 进程最近任务列表中的任务。 Android 然后将重新启动 运行 正在它刚刚终止的 OS 进程中的任何 Service
。
这种行为随着时间的推移而改变,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这种行为。
您无能为力确保您的 Service
不会被 Android 杀死和重启。你可以试试这个,这可能会有所帮助:
将您的 Service
放在单独的 OS 进程中。为此,请将 android:process=":remote"
添加到清单中的 <service>
标记。在某些版本的 Android 上,从最近任务列表中删除任务只会终止托管活动的 OS 进程。在这种情况下,这可能会阻止 Android 杀死你的 Service
。
你还说 onTaskRemoved()
没有被调用,你的 Service
在 Android 结束后不会自动重启。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)和一些 LG、华为和联想设备上也很常见。在这些设备上有一个允许 运行 在后台运行的应用程序列表(也称为 "protected" 应用程序)。您必须在这些设备上手动将您的应用添加到此列表(或告诉您的用户他们需要手动将您的应用添加到列表)。如果您的应用在 "protected apps" 或 "apps allowed to run in the background" 列表中,那么如果用户从最近任务列表中滑动任务,Android 现在可能会终止您的 Service
,或者如果它确实杀死了它,它应该调用 onTaskRemoved()
并且它还应该立即自动重启 Service
。