Android线程池在后台状态后无需执行即可运行

Android线程池在后台状态后无需执行即可运行,android,background,sleep,threadpool,Android,Background,Sleep,Threadpool,我的应用程序有一个线程池,可以同时创建3个线程。当我调用Runnable时,它们被添加到我的线程池中 我的问题发生在应用程序进入后台一段时间时。最终,我的线程停止执行池中的可运行程序,池继续增长。即使我将应用程序带回前台,我的线程也不会再次开始运行 我的理论是,当我的应用程序进入后台时,我的线程将被终止。我不确定是什么导致的,我也不确定是否有一种好的方法可以确定我的线程是否被终止,以便我可以重新启动它们 你有什么建议,我可以确定一个线程是否被杀死了? < P>你不能使用线程池来执行后台代码,因为

我的应用程序有一个线程池,可以同时创建3个线程。当我调用Runnable时,它们被添加到我的线程池中

我的问题发生在应用程序进入后台一段时间时。最终,我的线程停止执行池中的可运行程序,池继续增长。即使我将应用程序带回前台,我的线程也不会再次开始运行

我的理论是,当我的应用程序进入后台时,我的线程将被终止。我不确定是什么导致的,我也不确定是否有一种好的方法可以确定我的线程是否被终止,以便我可以重新启动它们


你有什么建议,我可以确定一个线程是否被杀死了?

< P>你不能使用线程池来执行后台代码,因为Android活动生命周期不会考虑你的应用程序是活跃的,并且在你失去UI焦点之后最终会杀死你的进程(包括所有线程)。您需要的是具有不同生命周期的。要做这样的事情,我们使用一个本地服务,它带有一个处理程序和一个HandlerThread,我们可以将Runnables发布到其中。你可能会想要类似的东西


注意:每次我这样做时,我都觉得一定有更简单的方法,因此如果有人简化了此模式,可能值得搜索。

当你说“线程池”时,你是指类似ExecutorService的东西吗?如果你需要在应用程序处于后台且没有用户交互的情况下运行线程,你为什么不运行一个服务?@Nick Campion-它只是apache许可的线程池。您将可运行程序添加到池中,当线程完成其工作时,它们会获取另一个可运行程序并执行它。我以前从未使用过这种服务@user432209-我已经考虑过了,但是我开始使用线程池只是为了降低我在运行时创建的线程数量。当应用程序处于后台时,可运行程序可能会发生,也可能不会发生。您还没有说出您所谈论的线程池库。告诉我们它使用的许可证不是很有用-它是哪个库?对不起-但是如果你想让你的线程比你的活动寿命长,你必须实现一个服务。然而,如何实现这项服务完全取决于您。