- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在运行 JobIntentService
以在后台执行任务。使用 JobIntentService
的原因是这样用户可以在操作发生时最小化屏幕,即使 Android 操作系统破坏了 Activity JobIntentService
仍会继续运行并且如果用户回来,他可以更新结果。
但我有一个案例,假设用户自己关闭了应用程序,那么我也想停止 JobIntentService
。
当用户自己关闭应用程序时,有什么方法可以通知JobIntentService
。
非常感谢任何帮助。
编辑:我尝试使用 onTaskRemoved
是没有用的,因为我的测试设备不调用它(我相信许多其他设备也不会调用它)。此外,当应用程序从最近的列表中删除时,服务会自动停止,但当应用程序再次打开时,服务会再次重新启动,这是我不想要的。
最佳答案
你的 Service
的原因is killed when the user swipe the task from the recent tasks list 当用户从最近的任务列表中滑动任务时,Android 只是终止了托管应用程序的操作系统进程。然后 Android 将重新启动任何 Service
正在它刚刚杀死的操作系统进程中运行。
这种行为随着时间的推移而改变,并且在不同版本的 Android 上有所不同,而且一些制造商有自己的自定义 ROM,他们以不同的方式实现这种行为。
您无能为力确保您的 Service
不会被 Android 杀死和重启。您可以试试这个,这可能会有所帮助:
把你的 Service
在一个单独的操作系统进程中。为此添加 android:process=":remote"
到 <service>
list 中的标记。在某些版本的 Android 上,从最近任务列表中删除任务只会终止托管 Activity 的操作系统进程。这可能会阻止 Android 杀死你的 Service
在这种情况下。
你也说onTaskRemoved()
没有被调用,你的 Service
Android kill 后不会自动重启。这发生在制造商试图积极节省电池电量的某些设备上。这在中国设备(小米、中兴等)和一些 LG、华为和联想设备上也很常见。在这些设备上有一个允许在后台运行的应用程序列表(也称为“ protected ”应用程序)。您必须在这些设备上手动将您的应用添加到此列表(或告诉您的用户他们需要手动将您的应用添加到列表)。如果您的应用程序在“ protected 应用程序”或“允许在后台运行的应用程序”列表中,那么 Android 现在可能会终止您的 Service
如果用户从最近的任务列表中滑动任务,或者如果它确实终止了它,它应该调用 onTaskRemoved()
它也应该自动重启 Service
立即。
关于android - Activity 和 JobIntentService 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51572385/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!