只是试图澄清我对IntentService
如何由OS管理如何管理终止状态的理解。根据终止,我的意思是根据以下文档销毁当前活动或杀死应用程序过程时:https://developer.android.com/guide/components/activities/activity-lifecycle
给定评论
另外,意图服务不受大多数用户界面生命周期事件的影响,因此它在会关闭异步的情况下继续运行
https://developer.android.com/training/run-background-service/create-service;
我感觉好像:
1)A启动IntentService
不受活动生命周期的影响。这是正确的吗?
2)如果(1)是真的,即使达到终止状态后,它也会继续无限期地运行,直到某种程度上它可以停止自身,或者OS决定停止它?
在我的特殊情况下,我在应用程序启动期间使用IntentService
查询API,获取内容,然后在Xamarin.Forms导航堆栈中添加新的(着陆)Page
(这将等同于启动新活动)。这使我谈到了下一个问题...
3)如果该应用程序到达IntentService
创建新活动时,该应用程序已经处于终止状态,会发生什么?当然,该活动一旦终止应用程序就无法添加到导航堆栈中?
-
是的,启动
IntentService
不受活动生命周期的影响。实际上,在有限服务之外的所有服务都不受活动生命周期的影响。 -
IntentService
将继续进行,直到完成其工作的完成,销毁应用程序,或者由于Android 8.0背景服务规则的更改而决定杀死Service
。 -
您对终止状态的使用太宽了...如果应用程序已经终止,那么什么也不会发生,因为
IntentService
也已经终止了。如果是启动终止IntentService
的Activity
,那么什么也不会发生,因为默认情况下,IntentService
与活动无关,即使这是启动它的活动。
对于最后一个问题,这实际上取决于您如何选择将IntentService
的结果传达给Activity
。
-
如果您使用的是
BroadcastReceiver
,则不会发生任何事情,因为IntentService
会不会出现任何问题,但Activity
将无法收到结果,因为终止了结果。 -
但是,如果您简单地创建了一个新的
Activity
,则可以简单地将startActivity()
与添加到意图的结果数据一起使用。不过,我怀疑用户不再在您的应用程序中看到Activity
突然在屏幕上打开。启动新的Activity
与以前的Activity
无关,因为Context
的任何实例都可以启动Activity
。
老实说,根据您的问题,听起来您非常关心IntentService
,并且与启动它的Activity
有联系。如果是这样,您真的不应该使用IntentService
,因为那不是真正的目的。这并不是要与Activity
建立联系。这只是为了完成工作和完成。
相反,绑定的Service
将是一个更好的选择,因为它与启动它的Activity
有直接连接。