2016-08-13 64 views
2

服务在我的主要活动中的onCreate上被调用。 该服务从Service类(不是IntentService)扩展 - 在该服务中,调用了一个线程,该线程具有无限循环 - 如果线程抛出任何异常,则关闭服务并调用该服务(由try catch块处理)。服务被android关闭后线程是否继续运行?

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

请回答以下问题:

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

.....如果是这样,如果在将来的任何时候抛出异常,它会记得该服务吗?

....如果不是,是否会引发异常以导致服务再次启动? B)当关闭我的服务时,android会不会转动我的线程?

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

回答

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

+0

非常感谢你,这正是我想知道的:)你确定听起来像你知道你的东西。我可以问问这是记录在哪里吗?不是因为我认为你的错,但是我有很多问题 - 并且自己查看它会更容易:P – AndroidStudent

+0

@AndroidStudent,不用客气。我在答案的末尾添加了几个参考 – Vasiliy

+0

非常感谢 - 非常有帮助:) – AndroidStudent

相关问题