Java 更改活动时线程池是否会自动关闭(是否应该使用)?

Java 更改活动时线程池是否会自动关闭(是否应该使用)?,java,android,frameworks,executorservice,android-lifecycle,Java,Android,Frameworks,Executorservice,Android Lifecycle,我知道在Android应用程序中使用ExecuterService(线程池)可能不是最好的选择。我知道如何使用AsyncTaskLoader和AsyncTask以及服务。我的问题更多的是关于更好地理解框架 如果我在Android应用程序中使用Executer框架创建了一个线程池,并且我没有将该池声明为静态池,那么当我离开创建它的活动时,该线程是否仍对应用程序的其余部分可用?我是否创建了“僵尸线程”,这些线程不可访问,但继续使用内存资源(内存泄漏) 我知道您需要关闭该服务,这可以在ondestor

我知道在
Android
应用程序中使用
ExecuterService
(线程池)可能不是最好的选择。我知道如何使用
AsyncTaskLoader
AsyncTask
以及
服务
。我的问题更多的是关于更好地理解框架

如果我在Android应用程序中使用Executer框架创建了一个线程池,并且我没有将该池声明为静态池,那么当我离开创建它的
活动时,该线程是否仍对应用程序的其余部分可用?我是否创建了“僵尸线程”,这些线程不可访问,但继续使用内存资源(内存泄漏)


我知道您需要关闭该服务,这可以在
ondestory()
中完成。我只是好奇,如果池被创建,而不是关闭,并且还声明为公共,那么它是否仍然可以访问。提前感谢您的解释。

如果线程仍在运行,则即使在调用onDestroy之后,它也会继续运行。线程本身的外部无法安全地取消线程,因此系统中不会尝试任何操作。(为什么不呢?因为这可能会导致死锁。系统不知道线程可能在等待什么条件,或者它可能持有什么锁,或者它可能声称会阻止其他线程的资源)

如果所有线程都已完成,则关闭executorservice将杀死所有线程


顺便说一下,您在第一段中的评论表明,您可能并不完全了解各种可用异步技术的所有细节。使用线程池和异步任务的原因非常不同,而且服务与Android上的线程无关。

线程池独立于活动、片段生命周期。所以,是的,它将在销毁活动后运行事件。

但是,我真正的问题/好奇是,如果它是公共的,您仍然可以从其他活动访问它吗?或者,它的变量是否需要标记为static