【问题标题】:Will a thread pool automatically be shut down when changing Activities (should it even be used)?更改活动时会自动关闭线程池(甚至应该使用它)吗?
【发布时间】:2019-11-28 14:29:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android frameworks executorservice android-lifecycle


    【解决方案1】:

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

    如果所有线程都完成了,那么关闭执行器服务将杀死所有线程。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但是,我真正的问题/好奇是,如果它是公开的,你还能从另一个活动中访问它吗?或者,它的变量是否需要标记为静态
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2020-07-19
      • 2017-07-30
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多