代码之家  ›  专栏  ›  技术社区  ›  Rajesh K

活动和工作意向服务生命周期

  •  2
  • Rajesh K  · 技术社区  · 7 年前

    我正在跑步 JobIntentService 在后台执行任务。使用原因 工作意向服务 这样用户就可以在操作发生时最小化屏幕,即使Android操作系统破坏了活动, 工作意向服务 仍将继续运行,如果用户返回,他可以用结果更新。

    但我有一个案例,假设用户自己关闭应用程序,然后我想停止 工作意向服务 也。

    有什么办法通知 工作意向服务 当用户自己关闭应用程序时。

    任何帮助都将不胜感激。

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   David Wasser    7 年前

    为什么你的 Service 当用户从“最近的任务”列表中滑动任务时被终止,这是因为当用户从“最近的任务”列表中滑动任务时,Android只会终止托管应用程序的操作系统进程。然后Android将重新启动任何 服务 在它刚刚杀死的操作系统进程中运行。

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

    你做什么都不能保证 服务 不会被Android杀死和重启。您可以尝试此操作,这可能有助于:

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

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