2

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

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

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

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

4

2 回答 2

3

这可能吗?

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

于 2012-09-28T21:02:06.213 回答
0

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

显然不能在不查看代码的情况下说是否发生了这种情况,但是这种机制可以让您检查是否发生了这种情况。

于 2012-09-28T21:08:14.813 回答