试图阐明我对达到终止状态后操作系统如何管理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/