更改“活动”时是否会自动关闭线程池(甚至应该使用它)?

时间:2019-07-19 14:59:36

标签: java android frameworks executorservice android-lifecycle

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

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

我知道您需要关闭服务,这可以在onDestroy()中完成。我很好奇,如果创建该池是否仍然可以访问,而不是关闭并声明为公共。谢谢您的事先解释。

2 个答案:

答案 0 :(得分:0)

如果线程仍在运行,则即使在调用onDestroy之后,该线程仍会继续运行。无法通过线程本身外部安全地取消线程,因此系统中不会进行任何尝试。 (为什么不这样做,因为这很可能会导致死锁。系统不知道线程可能正在等待什么条件或锁定了线程,或者它声称要阻塞其他线程的资源。)

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

顺便说一句-您在第一段中的评论表明您可能没有完全意识到各种可用异步技术的所有来龙去脉。您使用线程池和异步任务的原因非常不同,并且服务与Android上的线程无关。

答案 1 :(得分:0)

线程池独立于活动,片段生命周期。因此,是的,它将在破坏活动之后运行事件。