试图阐明我对达到终止状态后操作系统如何管理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创建新活动时应用程序已经处于终止状态,会发生什么?当然,由于应用程序终止后,活动不再存在,因此活动不能添加到导航堆栈中吗?

最佳答案

是的,开始的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有直接关系。

关于android - 应用程序进程被杀死后,如何管理正在运行的IntentService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54681617/

10-10 16:02