Android服务关闭后,线程是否会继续运行?

3

在我的主 Activity 中的 onCreate 中调用了一个服务。该服务继承自 Service 类(而不是 IntentService)- 在该服务中,调用了一个线程,该线程有一个无限循环 - 如果线程抛出任何异常,则关闭该服务,并重新调用该服务(由 try catch 块处理)。

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

请回答以下问题:

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

.....如果是这样,如果将来任何时候抛出异常,它会重新调用服务吗?

....如果不是,会抛出异常以导致服务重新启动吗?

B)当 Android 关闭我的服务时,它会关闭我的线程吗?

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

1个回答

2
只要线程正在运行,它就被认为是“垃圾回收根”。因此,线程本身和任何从该线程可达的对象都不会被垃圾回收。如果Android框架不干扰,具有无限循环的线程将继续无限期地运行。由于您的线程可以“关闭”服务,我假设它对服务有一个引用(隐式或显式),因此整个服务将保留在内存中。
然而,Android确实有一些监视应用程序内存消耗的手段,并且可以杀死应用程序以释放内存。当Android杀死一个应用程序时,它会杀死整个应用程序进程。当进程被杀死时,所有线程都会停止,并释放与它们相关联的内存,因此不会发生进一步的活动。
看起来这是您的服务的结尾,但是Android提供了额外的机制来控制在这种情况下发生的情况:您可以将服务指定为STICKY,Android将尽快尝试重新启动服务。这在此答案中详细讨论。
参考资料:
本答案提供的大部分信息都在官方服务页面服务类的javadoc中介绍。
对于在另一个进程中运行的Service的更复杂的情况,几乎没有文档,但是有许多博客。我也写了一篇关于这个主题的文章:如何在Android中建立可靠(崩溃和杀死容忍)与绑定IPC(例如AIDL)服务的连接

哇,非常感谢,这正是我想知道的!你确实听起来很懂行。我可以问一下这在哪里有记录吗?不是因为我认为你错了,而是我有很多问题 - 自己查找会更容易 :P - AndroidStudent
@AndroidStudent,不客气。我在答案末尾添加了一些参考资料。 - Vasiliy
非常感谢 - 非常有帮助 :) - AndroidStudent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接