![](/img/trans.png)
[英]IntentService is killed after 30 mins when my app is in background
[英]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 添加到导航堆栈中,因为一旦应用程序终止它就不再存在?
是的,启动的IntentService
不受活动生命周期的影响。 实际上,绑定服务之外的所有服务都不受活动生命周期的影响。
IntentService
将一直持续到它完成它的工作、应用程序被销毁,或者系统由于 Android 8.0 后台服务规则的变化而决定终止该Service
。
您对终止状态的使用范围太广...如果应用程序已经终止,那么什么都不会发生,因为IntentService
也已经终止了。 如果是启动IntentService
的Activity
被终止,那么什么都不会发生,因为默认情况下, IntentService
与活动无关,即使它是启动它的那个。
对于最后一个问题,它实际上取决于您选择如何将IntentService
的结果IntentService
给Activity
。
如果您使用的是BroadcastReceiver
,则不会发生任何事情,因为IntentService
将IntentService
触发广播,但Activity
将无法接收结果,因为它已终止。
但是,如果您只是创建一个新的Activity
,那么您可以简单地使用startActivity()
并将结果数据添加到 Intent 中。 不过,我怀疑当用户不在您的应用程序中时,他们是否会高兴地看到屏幕上突然打开的Activity
。 启动一个新的Activity
与之前的Activity
无关,因为Context
任何实例都可以启动一个Activity
。
老实说,根据您的问题,听起来您非常关心IntentService
并且它与启动它的Activity
有联系。 如果是这种情况,您真的不应该使用IntentService
,因为这不是真正的目的。 它并不意味着与Activity
有联系。 它只是为了完成工作和完成。
相反,绑定Service
将是更好的选择,因为它与启动它的Activity
有直接连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.