我有一个具有IntentService的应用程序来提供后台处理 - 特别是它从网络中获取数据并将其存储在Sqlite数据库中。 我的活动使用Context.startService()来请求服务更新数据,服务在更新完成后发送本地广播消息。
IntentService使用线程池来完成工作 - 主要是在请求完成之前打开新的Activity时,因此对不同资源的新请求不会阻止等待前一个完成。
一切正常,但是为了防止对同一资源的多个同时请求,我在发送请求后在活动中设置了一个标志,该请求停止发送新请求,直到它从服务返回DONE消息
现在,如果IntentService在操作过程中被终止,它将永远不会发送DONE消息,并且Activity永远不会知道请求未完成,并且不会重新请求资源。这可能吗?如果发生这种情况,是否可以通知活动?
答案 0 :(得分:3)
这可能吗?
只要您捕获所有可能未处理的异常,就不行。组件不会被单独“杀死”,例如,内存回收 - 这是在逐个进程的基础上完成的。
答案 1 :(得分:0)
如果你担心这个,那么在onDestroy of the IntentService中发送一个广播标志(或者只是设置一个断点,这样你就可以看到它是否被击中)。 IntentService旨在作为一个简化的服务来处理它自己的生命周期,所以如果你将工作从服务传递到线程池,那么IntentService可能认为它完成了它的工作 - 你可以在onDestroy中捕获它。
显然不能说如果没有查看代码就会发生这种情况,但是这种机制会让你检查它是否存在。