android - Activity 和 JobIntentService 生命周期
问题描述
我正在运行一个JobIntentService
在后台执行任务。使用的原因JobIntentService
是这样用户可以在操作发生时最小化屏幕,即使 Android 操作系统破坏了活动,它JobIntentService
仍然会继续运行,如果用户回来,他可以更新结果。
但是我有一种情况,假设用户自己关闭了应用程序,那么我也想停止JobIntentService
。
JobIntentService
当用户自己关闭应用程序时,有什么方法可以通知。
任何帮助将不胜感激。
编辑:我尝试使用onTaskRemoved
它是没有用的,因为我的测试设备没有调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近的列表中删除时,服务会自动停止,但当应用程序再次打开时会再次重新启动,这是我不想要的。
解决方案
当用户从最近的任务列表中滑动任务时,您被杀死的原因是,Service
当用户从最近的任务列表中滑动任务时,Android 只会杀死托管应用程序的操作系统进程。然后, Android 将重新启动Service
它刚刚杀死的操作系统进程中正在运行的任何程序。
这种行为随着时间的推移而发生变化,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这一点。
您无法做任何事情来确保您Service
不会被 Android 杀死和重新启动。你可以试试这个,这可能会有所帮助:
把你Service
放在一个单独的操作系统进程中。为此,请添加android:process=":remote"
到<service>
清单中的标记。在某些版本的 Android 上,从最近的任务列表中滑动任务只会杀死托管活动的操作系统进程。在这种情况下,这可能会阻止 Android 杀死您Service
。
您还说onTaskRemoved()
没有调用它,并且Service
在 Android 杀死它后不会自动重新启动它。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)上很常见,一些 LG、华为和联想设备也表现出这种行为。在这些设备上,有一个允许在后台运行的应用程序列表(也称为“受保护”应用程序)。您必须在这些设备上手动将您的应用添加到此列表中(或告诉您的用户他们需要手动将您的应用添加到列表中)。如果您的应用程序在“受保护的应用程序”或“允许在后台运行的应用程序”列表中,那么Service
如果用户从最近任务列表中滑动该任务,或者它确实杀死了它,Android 现在可能会终止您的应用程序,onTaskRemoved()
它也应该立即自动重启Service
。
推荐阅读
- sql-server - 查询帮助,没有得到正确的行
- sql - 以新形式重塑数据,以便为所有可能的情况创建新列
- python - 如何匹配相似(但不相同的字符串)中的标记,以便我可以将 POS 标签从一个字符串共享到另一个字符串?
- sql - 如果父母或孩子的姓名匹配,请选择父母
- jupyter-notebook - 使用 Latax 将 Jupyter 转换为 PDF
- html - 如何移动图像下方的绿色文字?
- javascript - 状态在反应中被覆盖
- ruby-on-rails - 持续调用特定数据属性的父模型是否效率低下?
- ruby - 如何左旋转整数的位
- vba - Selenium VBA:填写 Windows 弹出窗口以上传文件