android - 应用程序进程被杀死后如何管理正在运行的 IntentService

标签 android xamarin intentservice

只是想阐明我对 IntentService 在达到 terminating 状态后如何由操作系统管理的理解。通过终止,我的意思是当当前 Activity 被销毁或应用程序进程被终止时,根据以下文档: https://developer.android.com/guide/components/activities/activity-lifecycle

鉴于评论

Also, an IntentService isn't affected by most user interface lifecycle events, so it continues to run in circumstances that would shut down an AsyncTask

https://developer.android.com/training/run-background-service/create-service ;

我觉得好像:
1) 启动的 IntentService 不受 Activity 生命周期的影响。这是正确的吗?

2) 如果 (1) 为真,即使在达到终止状态后它是否会继续无限期地运行,直到它自己停止或操作系统决定停止它?

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

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

最佳答案

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

  2. IntentService 将继续,直到它完成其工作、应用程序被销毁,或者如果系统决定终止 Service 由于更改Android 8.0后台Service规则中。

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

对于最后一个问题,这实际上取决于您选择如何将 IntentService 的结果传递给 Activity

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

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

老实说,根据您的问题,您似乎非常关心 IntentService 并且它与启动它的 Activity 相关。如果是这样的话,你真的不应该使用 IntentService,因为这不是它的真正目的。它并不意味着与 Activity 有联系。它只是意味着工作和完成。

相反,绑定(bind)的 Service 会是更好的选择,因为它与启动它的 Activity 有直接联系。

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

相关文章:

android - 对于 int 值,JSON 响应始终返回零

android - 谁应该在什么时候处置 Intent ?

android - 从 intentservcie 回调到 jobservice

android - 即使在与 MoPub 集成后,我的应用程序也没有转换广告

android - WebView.setInitialScale 不起作用

Android Facebook session 问题

android - 如何在我的程序中间停止 Intent Service?

c# - 为一个 fragment 添加多个父 Activity

ios - MvvmCross 6.0 - TipCalc iOS 示例 - 无法正常工作

android - Intent Service 的 LVL 许可证检查