只想阐明我对达到 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
创建新活动时应用程序已经处于终止状态,会发生什么?确定会在应用程序终止后将其添加到导航堆栈中,因为它不再存在吗?
答案 0 :(得分:1)
是的,开始的IntentService
不受活动生命周期的影响。实际上,绑定服务之外的所有服务均不受活动生命周期的影响。
IntentService
将继续运行,直到完成其工作,应用程序被销毁,或者系统由于Android 8.0后台服务的更改而决定终止Service
规则。
您对终止状态的使用范围太广...如果应用程序已终止,则不会发生任何事情,因为IntentService
也将已经终止。如果是Activity
引发了终止的IntentService
,那么什么也没发生,因为默认情况下,IntentService
与活动无关,即使它是启动活动的也没有关系。
对于最后一个问题,实际上取决于您如何选择将IntentService
的结果传达给Activity
。
如果您使用的是BroadcastReceiver
,则不会发生任何事情,因为IntentService
会毫无问题地触发广播,但是Activity
将无法执行因为终止,所以收到结果。
但是,如果您只是创建一个新的Activity
,则可以简单地使用startActivity()
并将结果数据添加到Intent中。不过,我怀疑当用户Activity
不在您的应用程序中时会突然在屏幕上打开它们会感到高兴。启动新的Activity
与先前的Activity
没有任何关系,因为Context
的任何实例都可以启动Activity
。
老实说,根据您的问题,这听起来像您非常关心IntentService
,并且它与启动它的Activity
有关。如果真是这样,那么您实际上不应该使用IntentService
,因为这并不是真正的目的。这并不意味着与Activity
有联系。这只是为了完成工作。
相反,绑定的Service
将是更好的选择,因为它与启动它的Activity
有直接的联系。