Activity 和 JobIntentService 生命周期
Posted
技术标签:
【中文标题】Activity 和 JobIntentService 生命周期【英文标题】:Activity and JobIntentService Lifecycle 【发布时间】:2019-01-05 10:19:31 【问题描述】:我正在运行JobIntentService
在后台执行任务。使用JobIntentService
的原因是,用户可以在操作发生时最小化屏幕,即使 android 操作系统破坏了活动,JobIntentService
仍将继续运行,如果用户回来,他可以更新结果。
但我有一种情况,假设用户自己关闭了应用程序,那么我也想停止JobIntentService
。
当用户自己关闭应用时,有什么方法可以通知JobIntentService
。
任何帮助将不胜感激。
编辑:我尝试使用 onTaskRemoved
是没有用的,因为我的测试设备没有调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近列表中删除时服务会自动停止,但当应用程序再次打开时会再次重新启动,这是我不想要的。
【问题讨论】:
How to cancel a JobIntentService的可能重复 “用户关闭应用”是什么意思?用户如何“关闭应用”? @DavidWasser 从最近的列表中删除它? 【参考方案1】:当用户从最近的任务列表中滑动任务时,Service
被杀死的原因是,当用户从最近的任务列表中滑动任务时,Android 只会杀死托管应用程序的操作系统进程。然后,Android 将重新启动在它刚刚杀死的操作系统进程中运行的任何 Service
。
这种行为随着时间的推移而变化,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这一点。
您无法确保您的Service
不会被Android 杀死并重新启动。你可以试试这个,这可能会有所帮助:
将您的Service
放在单独的操作系统进程中。为此,请将 android:process=":remote"
添加到清单中的 <service>
标记中。在某些版本的 Android 上,从最近的任务列表中滑动任务只会杀死托管活动的操作系统进程。在这种情况下,这可能会阻止 Android 杀死您的 Service
。
您还说onTaskRemoved()
未被调用,并且您的Service
在Android 杀死它后不会自动重新启动。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)上很常见,一些 LG、华为和联想设备也表现出这种行为。在这些设备上,有一个允许在后台运行的应用程序列表(也称为“受保护”应用程序)。您必须在这些设备上手动将您的应用添加到此列表中(或告诉您的用户他们需要手动将您的应用添加到列表中)。如果您的应用程序在“受保护的应用程序”或“允许在后台运行的应用程序”列表中,那么如果用户从最近任务列表中滑动该任务,或者如果它确实如此,Android 现在可能会终止您的Service
杀死它,它应该调用onTaskRemoved()
,它也应该立即自动重启Service
。
【讨论】:
非常感谢您的回答。但是,当用户从最近的列表中滑动应用程序时,有什么方法可以确保JobIntentService
被 100% 杀死?由于我想在从最近列表中滑动应用程序时停止长时间运行的操作。
当然。只需在清单中设置android:stopWithTask="true"
。那么当用户从最近的任务列表中滑动任务时,Android 将始终杀死Service
。
感谢您的回答。已接受,但它说不能在 4 小时之前奖励赏金。但肯定会在 4 小时后完成。谢谢以上是关于Activity 和 JobIntentService 生命周期的主要内容,如果未能解决你的问题,请参考以下文章
Android——Activity和Intent及Activity的生命周期