繁体   English   中英

应用进程被终止后如何管理正在运行的 IntentService

[英]How is a running IntentService managed after the app process is killed

只是想澄清我对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)为真,它是否会在达到终止状态后无限期地继续运行,直到某个时刻它要么停止自己,要么操作系统决定停止它?

在我的特定情况下,我在应用程序启动期间使用IntentService来查询 API、抓取内容,然后向 Xamarin.Forms 导航堆栈添加一个新(登陆) Page (这相当于启动一个新活动)。 这引出了我的下一个问题......

3) 当IntentService创建一个新的 Activity 时,如果应用程序已经处于终止状态会发生什么? 肯定无法将 Activity 添加到导航堆栈中,因为一旦应用程序终止它就不再存在?

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

  2. IntentService将一直持续到它完成它的工作、应用程序被销毁,或者系统由于 Android 8.0 后台服务规则的变化而决定终止该Service

  3. 您对终止状态的使用范围太广...如果应用程序已经终止,那么什么都不会发生,因为IntentService也已经终止了。 如果是启动IntentServiceActivity被终止,那么什么都不会发生,因为默认情况下, IntentService与活动无关,即使它是启动它的那个。

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

  • 如果您使用的是BroadcastReceiver ,则不会发生任何事情,因为IntentServiceIntentService触发广播,但Activity将无法接收结果,因为它已终止。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM