【问题标题】:Is it possible that an IntentService will be killed before the Activity using it?IntentService 是否有可能在 Activity 使用它之前被杀死?
【发布时间】:2012-09-28 20:57:35
【问题描述】:

我有一个应用程序,它有一个 IntentService 来提供后台处理 - 特别是它从网络获取数据并将其存储在 Sqlite 数据库中。 My Activities 使用 Context.startService() 请求服务更新数据,更新完成后服务发送本地广播消息。

IntentService 使用线程池来完成工作 - 主要是在请求完成之前打开新 Activity 的情况下,因此对不同资源的新请求不会阻塞等待前一个完成。

一切正常,但为了防止对同一资源的多个同时请求,我在活动发送请求后在活动中设置了一个标志,停止发送新请求,直到它从服务返回 DONE 消息.

现在,如果 IntentService 在操作过程中被终止,它将永远不会发送 DONE 消息,并且 Activity 永远不会知道请求未完成,也不会重新请求资源。这可能吗?如果发生这种情况,有什么方法可以通知 Activity?

【问题讨论】:

    标签: android android-intent android-service


    【解决方案1】:

    这可能吗?

    只要您捕获所有可能的未处理异常,就不会。组件不会被单独“杀死”,例如内存回收——这是在逐个进程的基础上完成的。

    【讨论】:

    • 谢谢!我没有意识到只有整个进程会被终止。当然,我需要确保捕获任何可能的异常,我相信我正在这样做。如果我不是,那是一个错误和我的问题。
    【解决方案2】:

    如果您对此感到担忧,请在onDestroy of the IntentService 中发送一个广播标志(或者只需设置一个断点,以便查看它是否被命中)。 IntentService 旨在作为一种简化的服务来处理其自己的生命周期,因此如果您将工作从服务传递到线程池,则 IntentService 可能认为它完成了工作 - 您可以在 onDestroy 中捕获它。

    如果不查看代码,显然无法判断是否发生了这种情况,但这种机制可以让您检查是否发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多