在我的主要活动中的onCreate上调用服务。 该服务从Service类(而不是IntentService)扩展 - 在该服务中,调用一个具有无限循环的线程 - 如果线程抛出任何异常,它将关闭服务并调用该服务(由try catch块处理) 。
最终,由于任何原因,该服务由android关闭。
请回答以下问题:
A)我的线程是否继续运行?
.....如果是这样,如果将来任何时候抛出异常,它是否会召回该服务?
....如果没有,是否会抛出异常以使服务重新开始?
B)当关闭我的服务时,android会转动我的线程吗?
当我决定清除我的服务时,我只想了解我的应用程序会发生什么。
答案 0 :(得分:1)
只要线程正在运行,它就被认为是“垃圾收集根”。因此,线程本身和从该线程可到达的任何其他对象将不会被垃圾回收。如果Android框架不会干扰,具有无限循环的线程将继续无限期运行。由于您的线程可以“关闭”服务,我假设它具有对服务的引用(隐式或显式),因此整个服务将保留在内存中。
然而,Android确实有一些监控应用程序内存消耗的方法,并且可以杀死应用程序以释放内存。当Android杀死应用程序时,它会杀死应用程序的整个过程。当进程被终止时,所有线程都会被停止,并且释放与它们关联的内存,因此不会再进行任何活动。
似乎这是您服务的终结,但Android提供了额外的机制来控制在这种情况下发生的事情:您可以将服务指定为STICKY,Android将尝试尽快重启服务。在this answer中详细讨论了它。
<强>参考文献:强>
此答案中提供的大部分信息都包含在official Services page和javadoc of service class中。
对于在另一个进程中运行的Service
更复杂的情况,几乎没有文档,但有很多博客。我还写了一篇关于这个主题的帖子:How to establish a reliable (crash and kill tolerant) connection to bound IPC (e.g. AIDL) Service in Android