在android关闭服务后线程是否继续运行?

时间:2016-08-13 00:47:40

标签: android multithreading service

在我的主要活动中的onCreate上调用服务。 该服务从Service类(而不是IntentService)扩展 - 在该服务中,调用一个具有无限循环的线程 - 如果线程抛出任何异常,它将关闭服务并调用该服务(由try catch块处理) 。

最终,由于任何原因,该服务由android关闭。

请回答以下问题:

A)我的线程是否继续运行?

.....如果是这样,如果将来任何时候抛出异常,它是否会召回该服务?

....如果没有,是否会抛出异常以使服务重新开始?

B)当关闭我的服务时,android会转动我的线程吗?

当我决定清除我的服务时,我只想了解我的应用程序会发生什么。

1 个答案:

答案 0 :(得分:1)

只要线程正在运行,它就被认为是“垃圾收集根”。因此,线程本身和从该线程可到达的任何其他对象将不会被垃圾回收。如果Android框架不会干扰,具有无限循环的线程将继续无限期运行。由于您的线程可以“关闭”服务,我假设它具有对服务的引用(隐式或显式),因此整个服务将保留在内存中。

然而,Android确实有一些监控应用程序内存消耗的方法,并且可以杀死应用程序以释放内存。当Android杀死应用程序时,它会杀死应用程序的整个过程。当进程被终止时,所有线程都会被停止,并且释放与它们关联的内存,因此不会再进行任何活动。

似乎这是您服务的终结,但Android提供了额外的机制来控制在这种情况下发生的事情:您可以将服务指定为STICKY,Android将尝试尽快重启服务。在this answer中详细讨论了它。

<强>参考文献:

此答案中提供的大部分信息都包含在official Services pagejavadoc of service class中。

对于在另一个进程中运行的Service更复杂的情况,几乎没有文档,但有很多博客。我还写了一篇关于这个主题的帖子:How to establish a reliable (crash and kill tolerant) connection to bound IPC (e.g. AIDL) Service in Android