应用程序进程被杀死后,如何管理正在运行的IntentService

时间:2019-02-14 00:45:26

标签: android xamarin intentservice

只想阐明我对达到 termination 状态的IntentService由操作系统进行管理的理解。根据以下文档,终止是指当前活动被销毁或应用程序进程被销毁时: https://developer.android.com/guide/components/activities/activity-lifecycle

给出评论

  

此外,IntentService不受大多数​​用户界面生命周期事件的影响,因此它会在可能会关闭AsyncTask的情况下继续运行

https://developer.android.com/training/run-background-service/create-service

我觉得:
1)开始的IntentService不受活动生命周期的影响。这是正确的吗?

2)如果(1)为true,即使到达终止状态后,它是否仍将无限期地继续运行,直到它自行停止或OS决定停止它?

在我的特定情况下,我在应用启动过程中使用IntentService来查询API,获取内容,然后向Xamarin.Forms导航堆栈中添加新的{着陆} Page(等同于开始一个新活动)。 这使我想到了下一个问题...

3)如果IntentService创建新活动时应用程序已经处于终止状态,会发生什么?确定会在应用程序终止后将其添加到导航堆栈中,因为它不再存在吗?

1 个答案:

答案 0 :(得分:1)

  1. 是的,开始的IntentService不受活动生命周期的影响。实际上,绑定服务之外的所有服务均不受活动生命周期的影响。

  2. IntentService将继续运行,直到完成其工作,应用程序被销毁,或者系统由于Android 8.0后台服务的更改而决定终止Service规则。

  3. 您对终止状态的使用范围太广...如果应用程序已终止,则不会发生任何事情,因为IntentService也将已经终止。如果是Activity引发了终止的IntentService,那么什么也没发生,因为默认情况下,IntentService与活动无关,即使它是启动活动的也没有关系。

对于最后一个问题,实际上取决于您如何选择将IntentService的结果传达给Activity

  • 如果您使用的是BroadcastReceiver,则不会发生任何事情,因为IntentService会毫无问题地触发广播,但是Activity将无法执行因为终止,所以收到结果。

  • 但是,如果您只是创建一个新的Activity,则可以简单地使用startActivity()并将结果数据添加到Intent中。不过,我怀疑当用户Activity不在您的应用程序中时会突然在屏幕上打开它们会感到高兴。启动新的Activity与先前的Activity没有任何关系,因为Context的任何实例都可以启动Activity

老实说,根据您的问题,这听起来像您非常关心IntentService,并且它与启动它的Activity有关。如果真是这样,那么您实际上不应该使用IntentService,因为这并不是真正的目的。这并不意味着与Activity有联系。这只是为了完成工作。

相反,绑定的Service将是更好的选择,因为它与启动它的Activity有直接的联系。